前言
subprocess.run用法。
Operating System: Ubuntu 22.04.4 LTS
介绍
subprocess.run() 是 Python 3.5 及以上版本中 subprocess 模块的一个函数,用于运行子进程。它可以替代较老的 subprocess.call(), subprocess.check_call(), 和 subprocess.check_output() 等函数。
下面是 subprocess.run() 的基本用法:
import subprocess
# 最简单的用法,运行一个命令,并等待命令执行完成
subprocess.run(['ls', '-l'])
# 如果你需要捕获命令的输出,可以使用 capture_output 参数(Python 3.7+)
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout) # 打印命令的标准输出
# 如果你需要检查命令是否执行成功,可以使用 check 参数
try:
subprocess.run(['false'], check=True)
except subprocess.CalledProcessError as e:
print('命令执行失败:', e)
# 设置环境变量
subprocess.run(['printenv'], env={'MY_VAR': 'my_value'})
# 运行 shell 命令
subprocess.run('echo $MY_VAR', shell=True)
# 使用 stdin, stdout, stderr
proc = subprocess.run(['ls', '-l'], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
print(proc.stdout) # 打印标准输出
print(proc.stderr) # 打印标准错误
# 如果需要更复杂的管道或重定向,可以使用 Popen 类
proc = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
output = subprocess.run(['grep', 'test'], stdin=proc.stdout, capture_output=True, text=True)
proc.wait() # 等待第一个进程结束
print(output.stdout)
subprocess.run() 的主要参数包括:
- args: 要执行的命令(列表形式)。
- stdin, stdout, stderr: 子进程的标准输入、输出和错误。
- capture_output: 如果设置为 True,则标准输出和错误将被捕获。这个参数在 Python 3.7+ 中可用。
- text: 如果设置为 True,则标准输入、输出和错误会被当作文本处理(解码为字符串);否则,它们会被当作字节处理。这个参数在 Python 3.7+ 中可用,在 Python 3.6 中名为 universal_newlines。
- check: 如果设置为 True,则在命令返回非零退出状态时抛出 CalledProcessError 异常。
- env: 用于设置子进程的环境变量。
- shell: 如果设置为 True,则将通过 shell 执行命令。
使用 subprocess.run() 时需要注意以下几点:
- 当使用列表形式的命令时,列表的第一个元素是要运行的程序的名称,后续的元素是传递给程序的参数。
- 使用 shell=True 可以运行 shell 命令,但这样做可能会带来安全风险,特别是当命令包含来自用户输入的数据时。
- 当使用 capture_output 或 text 参数时,确保你的 Python 版本至少是 3.7。如果是更早的版本,使用 stdout=subprocess.PIPE 和 universal_newlines=True 作为替代。
结语
第二百三十九篇博文写完,开心!!!!
今天,也是充满希望的一天。