subprocess.run():
应用场景:执行系统命令,获取命令执行结果。
作用:运行命令,等待命令完成,然后返回CompletedProcess
实例。
参数:
args
:要执行的命令及其参数,可以是一个字符串或一个参数列表。capture_output
:如果为True
,则捕获命令的输出。input
:提供给子进程的输入数据。text
:如果为True
,则输出和错误将是文本格式。check
:如果为True
,并且返回码不为0,则引发CalledProcessError
。cwd
:子进程的当前工作目录。env
:子进程的环境变量。timeout
:设置子进程的超时时间。import subprocess
# 执行dir命令,并捕获输出
result = subprocess.run(['dir'], capture_output=True, text=True)
print(result.stdout)
# 执行带有输入参数的命令
result = subprocess.run(['echo', 'Hello, World!'], capture_output=True, text=True)
print(result.stdout)
# 执行带有超时的命令
try:
result = subprocess.run(['ping', 'localhost', '-n', '5'], timeout=2, capture_output=True, text=True)
except subprocess.TimeoutExpired:
print("Command timed out")
*如果报错 ‘系统找不到指定文件’,参数加上shell=True
subprocess.call()
应用场景:执行系统命令,不关心命令的输出,只关心命令是否成功执行。
作用:运行由参数args
指定的命令,并返回返回码。不会获取命令的输出。
import subprocess
# 执行dir命令,不捕获输出
returncode = subprocess.call(['dir'])
print(returncode)
subprocess.check_call()
应用场景:执行系统命令,并确保命令成功执行。
作用:与subprocess.call()
相同,但如果返回码不为0,则引发CalledProcessError
。
import subprocess
try:
# 执行dir命令,不捕获输出,如果失败则引发异常
subprocess.check_call(['dir'])
except subprocess.CalledProcessError as e:
print(f"Command failed with return code {e.returncode}")
subprocess.check_output()
应用场景:执行系统命令,并获取命令的输出。
作用:运行命令,并返回其输出。如果返回码不为0,则引发CalledProcessError
。
import subprocess
try:
# 执行dir命令,并捕获输出
output = subprocess.check_output(['dir'], text=True)
print(output)
except subprocess.CalledProcessError as e:
print(f"Command failed with return code {e.returncode}")
subprocess.Popen
应用场景:提供最大程度的灵活性来创建和管理子进程,包括设置输入/输出/错误管道、环境变量、工作目录等。
作用:Popen类是subprocess模块中用于创建子进程的底层接口。其他函数如run()、call()等都是基于Popen类的封装。
import subprocess
# 使用Popen执行dir命令,并捕获输出
process = subprocess.Popen(['dir'], stdout=subprocess.PIPE, text=True)
output, _ = process.communicate()
print(output)
# 使用Popen执行带有输入参数的命令
process = subprocess.Popen(['echo', 'Hello, World!'], stdout=subprocess.PIPE, text=True)
output, _ = process.communicate(input='Another input\n')
print(output)