subprocess模块可以用于创建子进程,连接到子进程的标准输入/输出/错误管道中去,并获得子进程执行的返回状态码
subprocess.run()
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, env=None)
调用subprocess模块推荐使用run()
函数(在它能够处理的应用场景下)。对于更高级的应用场景,直接使用Popen接口。需要注意的是run()函数在Python3.5版本引入。
该函数运行args参数中的命令,命令执行完成后,返回一个CompletedProcess
实例。
上面仅列出了一些常用的参数。实际上,run()函数的参数包括Popen构造器中所有的参数,以及timeout, input和check。这些参数都将传入Popen接口。
默认不捕获stdout或stderr。除非显式地指定stdout=subprocess.PIPE或stderr=subprocess.PIPE
timeout参数被传入到Popen.communicate()
。如果超时,子进程会被杀死并等待(waited for)。子进程终止后,抛出TimeoutExpired
异常。
input参数被传入到Popen.communicate()
并作为subprocess的标准输入。该参数值必须是字节序列或字符串(作为字符串时,必须指定encoding或errors,或设置universal_newlines=True)。使用input参数后,stdin自动设置为subprocess.PIPE,即使设置了其他值也不会生效。
如果设置了check=True,且子进程以非0状态码退出,将会抛出CalledProcessError
异常。该异常的属性保存了执行指令,退出状态码,标准输出和错误输出信息
如果指定了encoding或errors,或设置了universal_newlines=True,标准输入/输出/错误将作为文件对象,以文本模式打开。否则将以二进制模式打开。
env参数指定子进程的环境变量并传递到Popen接口。值不为None时,必须是映射对象显式地定义子进程的环境变量;值为None表示继承父进程的环境变量。
subprocess.CompletedProcess
run()函数的返回值,表示子进程执行完成。
- args:启动子进程的参数。值是一个列表或字符串。
- returncode:子进程的返回状态码。0表示进程正常执行,-N表示进程被信号N终止。
- stdout:子进程的标准输出。值是None或字节序列或字符串(需要调用进程时指定了encoding或errors)。如果指定了stderr=subprocess.STDOUT,那么stdout和stderr的值都会绑定到stdout属性,且stderrr的值变为None
- stderr:子进程的错误输出。值是None或字节序列或字符串(需要调用进程时指定了encoding或errors)。
- check_returncode():如果返回状态码非0,则抛出
CalledProcessError
异常
subprocess.DEVNULL
一个可以设置给stdin/stdout/stderr参数的特殊值。类似shell中的/dev/null
subprocess.PIPE
一个可以设置给stdin/stdout/stderr参数的特殊值。类似shell中的管道符|
。常用于Popen.communicate()
subprocess.STDOUT
一个可以设置给stderr参数的特殊值。类似shell中的错误输出重定向到标准输出2>&1
subprocess.SubprocessError
subprocess模块中异常的基类
subprocess.TimeoutExpired
SubprocessError
异常的子类,子进程执行超时时抛出
- cmd:派生出子进程的指令
- timeout:超时值
- output:
run()
或check_output()
捕获到的子进程标准输出 - stdout:output属性的别名
- stderr:
run()
捕获到的子进程错误输出
subprocess.CalledProcessError
SubprocessError
异常的子类,通过check_call()
或check_output()
派生的子进程返回非0状态码时抛出
- returncode:子进程的返回状态码。如果进程由于某个signal退出,则该属性为该signal值的负数
- cmd:派生出子进程的指令
- output:
run()
或check_output()
捕获到的子进程标准输出 - stdout:output属性的别名
- stderr:
run()
捕获到的子进程错误输出