In Python, executing a program or calling a system command is a common task that can be accomplished using the subprocess
module. This module provides a way to spawn new processes, connect to their input/output/error pipes, and obtain their return codes.
There are several functions in the subprocess
module that can be used to execute system commands, including run
, call
, and Popen
. Each function has its own set of options and use cases, so it’s important to choose the right one for your specific needs.
In this article, we will explore how to execute a program or call a system command in Python using the subprocess
module, and provide examples of each of the main functions.
Using run function
To execute a program or call a system command in Python, you can use the subprocess
module. This module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes.
Here’s a basic example that runs the “ls” command on a Unix-based system using run function:
import subprocess
# run the "ls" command
result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
# print the output
print(result.stdout)
In this example, we use the run
function to execute the “ls” command with the “-l” flag. The capture_output
parameter tells subprocess
to capture the command’s standard output and error streams, and the text
parameter tells it to decode the output as a string.
Using Popen function
You can also use other functions in the subprocess
module, such as Popen
or call
, depending on your needs. The Popen
function allows more control over the process, such as redirecting input and output streams or setting environment variables. The call
function is similar to run
, but it only returns the return code of the command, not the output.
Here’s an example using Popen
to run the “ping” command:
import subprocess
# start a new process to run the "ping" command
ping_process = subprocess.Popen(["ping", "-c", "3", "google.com"], stdout=subprocess.PIPE)
# read the output from the process
output, error = ping_process.communicate()
# print the output
print(output.decode())
Using call function
Here’s an example of using the call
function from the subprocess
module to execute a system command:
import subprocess
# call the "echo" command
subprocess.call(["echo", "Hello, world!"])
Sure, here’s an example of using the call
function from the subprocess
module to execute a system command:
pythonCopy codeimport subprocess
# call the "echo" command
subprocess.call(["echo", "Hello, world!"])
In this example, we use the call
function to execute the “echo” command with the argument “Hello, world!”. The call
function waits for the command to complete and returns its exit code.
Note that unlike the run
function, call
does not capture the output of the command. If you need to capture the output, you can redirect the standard output stream of the command to a pipe and read from it after the command has finished executing, like this:
import subprocess
# call the "ls" command and capture its output
output = subprocess.check_output(["ls", "-l"])
# print the output
print(output.decode())
In this example, we use the check_output
function to execute the “ls” command with the “-l” flag and capture its standard output. The decode
method is used to convert the bytes output to a string. The check_output
function raises a CalledProcessError
if the command returns a non-zero exit code, so it can be used to check for errors in the command execution.
In summary, the subprocess
module in Python provides a powerful way to execute system commands and programs from within Python scripts. By using functions such as run
, call
, and Popen
, you can easily execute commands and capture their output, set environment variables, and control input/output streams.
It’s important to understand the differences between these functions and their options, as well as the potential security risks involved in executing system commands from within a Python script. With the knowledge and tools provided by the subprocess
module, however, you can safely and efficiently execute system commands and programs from your Python code.