在Python中,subprocess.run() 函数是用于运行外部命令或程序的一个便捷接口。它是 subprocess 模块在Python 3.5及以上版本中引入的一个高级API,用于替代较旧的 subprocess.call()、subprocess.check_call() 和 subprocess.check_output() 函数。subprocess.run() 会等待命令完成,并返回一个 CompletedProcess 实例,该实例包含了命令的返回码、标准输出和标准错误输出。
![图片[1]_深入探索Python中subprocess.run()函数的使用方法与实例_知途无界](https://zhituwujie.com/wp-content/uploads/2025/01/d2b5ca33bd20250104113236.png)
以下是 subprocess.run() 的具体使用方法和一些示例:
基本用法
import subprocess
# 运行一个简单的命令,比如列出当前目录的内容
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
# 打印命令的返回码
print('Return code:', result.returncode)
# 打印命令的标准输出
print('Standard Output:', result.stdout)
# 打印命令的标准错误输出(如果有的话)
print('Standard Error:', result.stderr)
参数说明
args:要运行的命令和参数,通常是一个列表,其中第一个元素是命令名,后续元素是传递给该命令的参数。也可以是一个字符串,但使用列表可以避免shell注入攻击。capture_output:如果设置为True,则捕获标准输出和标准错误输出,并将它们分别存储在CompletedProcess实例的stdout和stderr属性中。text:如果设置为True,则将标准输出和标准错误输出作为字符串处理(在Python 3.7及以上版本中可用)。如果为False(默认值),则输出为字节串。shell:如果设置为True,则通过shell运行命令(比如bash)。这可能会带来安全风险,特别是当命令字符串包含来自不可信源的数据时。默认为False。check:如果设置为True,并且命令返回非零退出状态,则subprocess.run()会引发一个CalledProcessError异常。默认为False。
示例
运行一个简单的命令
result = subprocess.run(['echo', 'Hello, World!'], capture_output=True, text=True, shell=False)
print(result.stdout)
捕获并处理错误
try:
result = subprocess.run(['ls', '/nonexistent_directory'], capture_output=True, text=True, check=True)
except subprocess.CalledProcessError as e:
print('Command failed with return code:', e.returncode)
print('Error output:', e.stderr)
使用shell特性(注意安全性)
# 注意:使用shell=True时要小心,避免shell注入攻击
result = subprocess.run('echo $HOME', capture_output=True, text=True, shell=True)
print(result.stdout.strip())
注意事项
- 当使用
shell=True时,确保命令字符串是安全的,避免将不受信任的数据直接传递给shell。 capture_output=True和text=True是常用的组合,但根据你的需求,你可能只需要其中一个或另一个。- 如果命令可能会产生大量输出,并且你不打算捕获它,那么可以省略
capture_output=True以避免不必要的内存使用。 - 使用
check=True可以让subprocess.run()在命令失败时自动引发异常,这有助于在脚本中处理错误情况。
© 版权声明
文中内容均来源于公开资料,受限于信息的时效性和复杂性,可能存在误差或遗漏。我们已尽力确保内容的准确性,但对于因信息变更或错误导致的任何后果,本站不承担任何责任。如需引用本文内容,请注明出处并尊重原作者的版权。
THE END

























暂无评论内容