Python exec command
last modified January 29, 2024
Python exec tutorial shows how to execute shell commands and programs in Python.
In Python, there are several ways to execute shell commands or programs.
We can use the os module or the subprocess module.
The subprocess module has the most powerful tools for executing
commands.
Python exec command with os.system
The os.system is a simple tool for executing a program.
#!/usr/bin/python
import os
os.system('firefox')
The example launches firefox.
Python exec command with os.popen
The os.popen allows us to receive input from the executed command.
It opens a pipe to or from a command. The return value is an open file object
connected to the pipe, which can be read or written depending on whether
mode is 'r' (default) or 'w'.
#!/usr/bin/python
import os
output = os.popen('ls -la').read()
print(output)
In the example, we read the output of the ls command and print it
to the console.
$ ./read_output.py total 28 drwxr-xr-x 2 janbodnar janbodnar 4096 Oct 11 14:30 . drwxr-xr-x 113 janbodnar janbodnar 4096 Oct 11 13:35 .. -rwxr-xr-x 1 janbodnar janbodnar 202 Oct 11 14:02 listing.py -rwxr-xr-x 1 janbodnar janbodnar 218 Oct 11 13:54 node_version.py -rwxr-xr-x 1 janbodnar janbodnar 547 Oct 11 14:04 pinging.py -rwxr-xr-x 1 janbodnar janbodnar 78 Oct 11 13:39 read_output.py -rwxr-xr-x 1 janbodnar janbodnar 50 Oct 11 13:37 simple.py
Python exec command with subprocess
The subprocess module allows us to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. This module intends to replace several older modules and functions.
#!/usr/bin/python
import subprocess
output = subprocess.run(['node', '--version'], text=True, capture_output=True)
print(f'Node version: {output.stdout.strip()}')
The example uses subprocess module to get the version of Node.
output = subprocess.run(['node', '--version'], text=True, capture_output=True)
The run executes the command, waits for command to complete, and
returns a CompletedProcess instance. To capture output to
standard output and standard error output, we set the capture_output
to true. By default, the output is returned in bytes string.
By setting the text option to True, we get a normal
string.
$ ./node_version.py Node version: v12.18.4
Python list contents with subprocess
In the following example, we list the contents of a user's home directory.
#!/usr/bin/python
import subprocess
from pathlib import Path
output = subprocess.Popen(['ls', '-l', Path.home()], text=True,
stdout=subprocess.PIPE)
stdout, _ = output.communicate()
print(stdout)
The underlying process creation and management in this module is handled by the
Popen class. It offers more flexibility than the convenience
functions.
stdout, _ = output.communicate()
We interact with the process with the communicate method.
It sends data to stdin and reads data from stdout and stderr, until EOF is
reached.
Source
In this article we have executed shell commands and programs.
Author
List all Python tutorials.