Complete Guide to Running Bash Scripts from Python

Nov 21, 2025 · Programming · 8 views · 7.8

Keywords: Python | Bash Script | subprocess Module

Abstract: This article provides a comprehensive exploration of executing Bash scripts within Python programs, focusing on the usage of the subprocess module. Through concrete code examples, it explains the role of the shell=True parameter, setting script execution permissions, handling path issues, and security considerations. The article also compares the advantages and disadvantages of different execution methods to help developers choose the most suitable approach.

Core Mechanism of Calling Bash Scripts in Python

In the Python ecosystem, the subprocess module provides powerful functionality for executing external commands and scripts. When needing to call Bash scripts within Python programs, correctly understanding and using this module is crucial.

Basic Execution Methods

Consider the following simple Bash script example:

sleep 10

The basic code to call this script in Python is:

import subprocess
print("start")
subprocess.call("sleep.sh")
print("end")

However, this simple call may encounter execution issues. To ensure the script executes properly, it's essential to verify that the script file has executable permissions, which can be set using the chmod u+rx sleep.sh command.

Role of the shell=True Parameter

When the script lacks a shebang line (such as #!/bin/bash), the shell=True parameter must be used:

subprocess.call("sleep.sh", shell=True)

This parameter instructs Python to execute the command through the system shell, but security risks must be considered. If the script includes a shebang line, the shell=True parameter can be omitted on Unix-like systems.

Path Handling Strategies

Path issues are common execution obstacles. If the script is not in the system's PATH environment variable, the full path must be specified:

subprocess.call("./sleep.sh", shell=True)

Or use an absolute path:

subprocess.call("/full/path/to/sleep.sh", shell=True)

Security Considerations

Extra caution is required when using shell=True, especially when command parameters come from untrusted sources. This can lead to command injection vulnerabilities. Whenever possible, prefer passing parameters in list form:

subprocess.call(["/path/to/script.sh", "arg1", "arg2"])

Advanced Execution Methods

For more complex scenarios, the subprocess.run function can be used, offering richer control options:

result = subprocess.run(["./sleep.sh"], capture_output=True, text=True)
print(result.stdout)

This method can capture the script's output and error information, facilitating subsequent processing.

Comparison of Alternative Approaches

Besides the subprocess module, the os.system function can also be used:

import os
os.system("./sleep.sh")

However, this method offers limited functionality, and the subprocess module is recommended for better control and flexibility.

Practical Application Recommendations

In actual development, it's advised to follow these best practices: ensure scripts have appropriate execution permissions, properly handle path issues, use shell=True cautiously, and employ list form parameter passing to enhance security. Through these methods, Bash script functionality can be reliably integrated into Python programs.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.