视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python中subprocess类与常量的详细介绍
2020-11-27 14:20:22 责编:小采
文档


args:字符串或序列。如果是序列,则args中的第一个元素是要执行的程序;如果是字符串,解释执行与平台有关,在POSIX系统args将被解释为要执行的程序的名称或路径(前提是不传递任何参数给程序)。

shell:指定是否使用shell作为要执行的程序。如果设置为True,更推荐和字符串类型的args参数使用。
在POSIX系统,shell=True默认使用/bin/sh作为shell。如果args为字符串,该字符串表示要通过shell执行的命令;如果args为序列,第一个元素指定要执行的程序,其他元素视为参数。
在Windows系统,shell=True默认使用COMSPEC环境变量指定的shell,一般是C:WINDOWSsystem32cmd.exe。唯一需要指定shell=True的场景是要执行的指令是shell内置的,如dir, copy

bufsize:创建stdin/stdout/stderr管道文件对象时作为对应的参数传递给open()函数。
0:不始用缓冲
1:使用行缓冲
其他正整数:缓冲大小
负整数(默认):使用系统默认值

executable:使用shell=True的场景很少。shell=True时,在POSIX系统上此参数表示指定一个新的shell程序替换默认shell/bin/sh

stdin/stdout/stderr:分别指定程序执行的标准输入,标准输出,标准错误。可选值包括PIPEDEVNULL,已存在的文件描述符(正整数),已存在的文件对象,None。子进程文件句柄继承自父进程。除此之外,stderr还可以是STDOUT,表示标准错误输出重定向到标准输出。

preexec_fn:限于POSIX系统,设置一个可调用对象,先于子进程中的程序执行。

close_fds:如果为False,文件描述符遵循Inheritance of File Descriptors中描述的inheritable标识。
如果为True,在POSIX系统下,在子进程执行前关闭除0,1,2外的文件描述符。

pass_fds:限于POSIX,可选的文件描述符序列,用于在父子进程间保持开放。只要提供了此参数,close_fds强制设为True。

cwd:在子进程执行前改变工作目录为cwd,可以是字符串或path-like对象。

restore_signals:限于POSIX,略

start_new_session:限于POSIX,略

env:dict对象,为新进程定义环境变量,替换继承自父进程的变量。在Windows下,要运行side-by-side assembly必须包含可用的环境变量SystemRoot。如果指定了env,就必须提供程序执行依赖的所有环境变量

encoding/errors/text/universal_newlines:stdin/stdout/stderr默认以二进制模式打开。但如果指定了encoding/errors或者text为True,将使用指定的encoding和errors以文本模式打开stdin/stdout/stderr。universal_newlines参数等同于text,用于后向兼容。

startupinfo:仅限于Windows,略

creationflags:仅限于Windows,略

方法

poll():检查子进程是否终止。返回None表示未终止,否则设置returncode属性并返回。

wait(timeout=None):如果子进程在timeout后没有终止,抛出TimeoutExpired异常。否则设置returncode属性并返回。

communicate(input=None, timeout=None):进程交互:发送数据到stdin,读取stdout或stderr的数据知道读取到结束符。返回(stdout_data, stderr_data)形式的元组,元组类型是string或byte。
input为None或要发送到子进程的数据,根据stream打开模式的不同,可以是string或byte类型。
如果要和进程的stdin交互,创建Popen对象时需要指定stdin=PIPE。类似的,返回的tuple如果希望是非None,需要设置stdout=PIPE和/或stderr=PIPE。
如果子进程在timeout后没有终止,抛出TimeoutExpired异常,但子进程并未kill掉,一个良好的应用应该kill掉子进程并结束交互:

proc = subprocess.Popen(...)
try:
 outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
 proc.kill()
 outs, errs = proc.communicate()

send_signal(signal):发送信号到子进程

terminate():终止子进程。POSIX系统上,发送SIGTERM信号到子进程,Windows系统上会调用TerminateProcess()终止进程

kill():强制终止子进程。POSIX系统上,发送SIGKILL信号到子进程。Windows系统上kill()是terminate()的别名

属性

args:传入Popen构造器的第一个参数,list或string类型

stdin:如果传递给Popen的stdin参数是PIPE,该属性表示string或byte类型的可写stream对象。如果传递给Popen的stdin参数不是PIPE,此属性值为None

stdout:与Popen.stdin相近,但stream对象是可读的

stderr:与Popen.stdout相近

pid:子进程进程号。如果设置了shell=True,pid表示派生shell的进程号

returncode:子进程返回码,None表示进程未终止。负数-N表示进程被信号N终止(仅限POSIX)。

CompletedProcess

run()函数运行的返回值,表示进程执行完成。

属性

args:传入run()函数的第一个参数,list或string类型

returncode:子进程退出码。如果为负数,表示进程因为某个信号退出

stdout:捕获的子进程的标准输出,默认为byte类型,如果run()函数调用时指定了encoding或errors,或设置了text=True则为string类型。如果未捕获标准输出返回None

stderr:捕获的子进程的标准错误,默认为byte类型,如果run()函数调用时指定了encoding或errors,或设置了text=True则为string类型。如果未捕获标准错误返回None

方法

check_returncode():如果returncode非0,抛出CalledProcessError异常

异常

subprocess.SubprocessError

subprocess模块的异常基类

subprocess.TimeoutExpired

子进程执行超时。

属性

cmd:指令

timeout:秒为单位的时间

output:run()check_output()函数捕获到的子进程的输出,否则为None

stdout:output属性别名

stderr:run()函数捕获到的子进程的错误输出,否则为None

subprocess.CalledProcessError

check_call()check_output()函数返回非0状态码时抛出。

属性

returncode:子进程退出码。如果为负数,表示进程因为某个信号退出

cmd:同TimeoutExpired

output:同TimeoutExpired

stdout:同TimeoutExpired

stderr:同TimeoutExpired

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的python视频教程栏目!

下载本文
显示全文
专题