Subprocess Execution
Understanding subprocess Module
The subprocess module is the recommended way to execute shell commands in Python, offering robust and flexible command execution capabilities.
subprocess Methods Overview
graph TD
A[subprocess Methods] --> B[run()]
A --> C[Popen()]
A --> D[call()]
A --> E[check_output()]
1. subprocess.run() - Modern Approach
import subprocess
## Basic command execution
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)
## Complex command with shell
result = subprocess.run('grep -R "error" /var/log', shell=True, capture_output=True, text=True)
2. subprocess.Popen() - Advanced Execution
import subprocess
## Detailed process control
process = subprocess.Popen(['ping', '-c', '4', 'google.com'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True)
stdout, stderr = process.communicate()
print(stdout)
Execution Parameters
| Parameter |
Description |
Example |
capture_output |
Capture command output |
True/False |
shell |
Use shell environment |
True/False |
text |
Return string instead of bytes |
True/False |
check |
Raise exception on error |
True/False |
Advanced Execution Techniques
Timeout Handling
import subprocess
try:
result = subprocess.run(['sleep', '10'],
timeout=5,
capture_output=True)
except subprocess.TimeoutExpired:
print("Command timed out")
Environment Customization
import subprocess
import os
custom_env = os.environ.copy()
custom_env['CUSTOM_VAR'] = 'value'
subprocess.run(['env'], env=custom_env)
LabEx Pro Tip
When practicing subprocess techniques, always consider security implications and potential command injection risks.