FROMDEV

Executing System Commands in Python with Subprocess Module: A Guide and Examples

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.

Exit mobile version