gevent.subprocess
--合作社 subprocess
模块#
合作社 subprocess
模块。
小心
在POSIX平台上,此模块不能从主线程以外的本机线程使用;尝试这样做将引发 TypeError
. 这个模块依赖于libev的fork watchers。在POSIX系统中,fork监视程序是使用信号实现的,并且是将进程定向信号发送到的线程。 is not defined . 因为每个本机线程都有自己的gevent/libev循环,这意味着注册到一个循环(线程)的fork观察程序可能永远看不到有关它生成的子线程的信号(如果将信号发送到不同的线程)。
备注
此模块的接口旨在与标准库的接口相匹配。 subprocess
模块(从python 3到python 2有许多向后兼容的扩展)。该模块的python 2和python 3版本(python2)之间存在一些小的差异 TimeoutExpired
特别是例外情况扩展了 Timeout
没有 SubprocessError
)以及在POSIX和Windows版本之间。此处的HTML文档只能描述一个版本;有关最终文档,请参阅标准库或源代码。
- exception CalledProcessError(returncode, cmd, output=None, stderr=None)[源代码]#
-
当用check=true调用run()并且进程返回非零退出状态时引发。
- 属性:
命令,返回代码,stdout,stderr,输出
- property stdout#
输出属性的别名,以匹配stderr
- exception TimeoutExpired(cmd, timeout, output=None, stderr=None)[源代码]#
-
当等待子进程时超时过期时,会引发此异常。
- 属性:
命令,输出,stdout,stderr,超时
- class CompletedProcess(args, returncode, stdout=None, stderr=None)[源代码]#
基类:
object
已完成运行的进程。
这是由run()返回的。
- 属性:
args:传递给run()的列表或str参数。
返回码:进程的退出码,信号为负。
标准输出:标准输出(如果未捕获则无)。
stderr:标准错误(如果未捕获,则无)。
在 1.2a1 版本加入: 这首先出现在python 3.5中,并可用于gevent中的所有python版本。
- class Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=<object object>, shell=False, cwd=None, env=None, universal_newlines=None, startupinfo=None, creationflags=0, restore_signals=True, start_new_session=False, pass_fds=(), encoding=None, errors=None, text=None, group=None, extra_groups=None, user=None, umask=-1, pipesize=-1, process_group=None, threadpool=None)[源代码]#
基类:
object
此模块中的底层进程创建和管理由popen类处理。它提供了很大的灵活性,使开发人员能够处理便利功能未涉及的不太常见的情况。
参见
subprocess.Popen
此类应具有与标准库类相同的接口。小心
某些参数的默认值,特别是
buffering
,在Python2和Python3之间有所不同。为了在不同版本之间实现最一致的行为,最好显式传递所需的值。小心
在Python 2上,
read
的方法。stdout
和stderr
除非明确请求缓冲,否则不会缓冲属性(例如,bufsize=-1
). This is different than theread
method of the standard library attributes, which will buffer internally even if no buffering has been requested. This matches the Python 3 behaviour. For portability, please explicitly request buffering if you wantread(n)
to return alln
bytes, making more than one system call if needed. See issue 1701 了解更多上下文。在 1.2a1 版本发生变更: 实例现在可以用作Python2.7下的上下文管理器。以前这只限于Python3。
在 1.2a1 版本发生变更: 实例现在保存
args
python 2.7下的属性。以前这只限于Python3。在 1.2b1 版本发生变更: 添加
encoding
和errors
python 3的参数。在 1.3a1 版本发生变更: 接受“类路径”对象 cwd 所有平台上的参数。这是添加到Python3.6中的。以前使用gevent时,它只在3.6上的POSIX平台上工作。
在 1.3a1 版本发生变更: 添加
text
参数作为universal_newlines
,如在python 3.7中添加的。在 1.3a2 版本发生变更: 允许在python 2下使用与python 3相同的关键字参数:
pass_fds
,start_new_session
,restore_signals
,encoding
和errors
. 在python 2下,encoding
和errors
被忽略,因为使用了通用换行符的本机处理。在 1.3a2 版本发生变更: 在python 2下,
restore_signals
默认为False
. 以前它默认为True
和在Python3中一样。在 20.6.0 版本发生变更: 添加 组 , extra_groups , user 和 乌马斯克 论据。这些都是在python3.9中添加的,但是在任何gevent版本中都可以使用,前提是存在底层平台支持。
在 20.12.0 版本发生变更: 仅在Python2上,如果请求无缓冲的二进制通信,
stdin
属性将具有一个write
方法,该方法实际执行内部缓冲和循环,类似于标准库。它保证在单个调用中写入提供给它的所有数据(但在内部,它可能会进行许多系统调用和/或绕过事件循环来实现这一点)。看见 issue #1711 。在 21.12.0 版本发生变更: 添加了
pipesize
与Python3.10兼容的参数。这在所有平台上都被忽略。在 22.08.0 版本发生变更: 添加了
process_group
和check
与Python3.11兼容的参数。- communicate(input=None, timeout=None)[源代码]#
与进程交互并返回其输出和错误。
发送 输入 数据到stdin。
从stdout和stderr读取数据,直到到达文件末尾。
等待进程终止。
可选的 输入 参数应该是要发送到子进程的字符串,如果不应该向子进程发送数据,则参数应该是无。
communication()返回一个元组(stdout、stderr)。
- 参数:
timeout -- 在python 2下,这是一个gevent扩展;如果给定并到期,我们将提升
TimeoutExpired
延伸gevent.timeout.Timeout
(请注意,这只会扩展BaseException
, notException
)在Python3下,这提高了标准TimeoutExpired
例外。
在 1.1a2 版本发生变更: 在python 2下,如果 超时 逝去,升起
gevent.timeout.Timeout
例外。以前,我们静静地回来了。在 1.1b5 版本发生变更: 荣誉A 超时 即使无法与孩子通信(stdin、stdout和stderr不是管道)。
- wait(timeout=None, _raise_exc=True)[源代码]#
等待子进程终止。退换商品
returncode
属性。- 参数:
timeout -- 等待的浮点秒数。在python 2下,这是一个gevent扩展,如果它过期,我们只返回它。在python 3下,如果这段时间过去了而没有完成这个过程,
TimeoutExpired
提高了。
- call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None) returncode [源代码]#
带参数运行命令。等待命令完成或超时,然后返回返回代码属性。
参数与popen构造函数相同。例子::
retcode = call(["ls", "-l"])
在 1.2a1 版本发生变更: 这个
timeout
关键字参数现在在所有支持的python版本(不仅仅是python 3)上都被接受,如果它过期,将引发TimeoutExpired
异常(在python 2下,这是Timeout
)
- check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False, timeout=None) 0 [源代码]#
带参数运行命令。等待命令完成。如果退出代码为零,则返回,否则引发
CalledProcessError
. 这个CalledProcessError
对象将在返回代码属性中包含返回代码。参数与popen构造函数相同。例子::
retcode = check_call(["ls", "-l"])
- check_output(args, *, input=None, stdin=None, stderr=None, shell=False, universal_newlines=False, timeout=None) output [源代码]#
用参数运行命令并返回其输出。
如果退出代码为非零,则会引发
CalledProcessError
. 这个CalledProcessError
对象将在返回代码属性中具有返回代码,在输出属性中具有输出。参数与popen构造函数相同。例子::
>>> check_output(["ls", "-1", "/dev/null"]) '/dev/null\n'
这个
stdout
不允许使用参数,因为它在内部使用。要捕获结果中的标准错误,请使用
stderr=STDOUT
::>>> output = check_output(["/bin/sh", "-c", ... "ls -l non_existent_file ; exit 0"], ... stderr=STDOUT).decode('ascii').strip() >>> print(output.rsplit(':', 1)[1].strip()) No such file or directory
还有一个附加的可选参数“input”,允许您将字符串传递给子进程的stdin。如果使用此参数,则不能同时使用popen构造函数的“stdin”参数,因为它也将在内部使用。例子::
>>> check_output(["sed", "-e", "s/foo/bar/"], ... input=b"when in the course of fooman events\n") 'when in the course of barman events\n'
如果
universal_newlines=True
如果传递,则返回值将是字符串而不是字节。在 1.2a1 版本发生变更: 这个
timeout
关键字参数现在在所有支持的python版本(不仅仅是python 3)上都被接受,如果它过期,将引发TimeoutExpired
异常(在python 2下,这是Timeout
)在 1.2a1 版本发生变更: 这个
input
现在,所有支持的python版本都接受关键字参数,而不仅仅是python 3。在 22.08.0 版本发生变更: 通过了
check
关键字参数被禁止,就像在Python3.11中一样。
- getoutput(cmd, *, encoding=None, errors=None)[源代码]#
返回在shell中执行cmd的输出(stdout或stderr)。
与getStatusOutput()类似,只是退出状态被忽略,返回值是包含命令输出的字符串。例子:
>>> import subprocess >>> subprocess.getoutput('ls /bin/ls') '/bin/ls'
- getstatusoutput(cmd, *, encoding=None, errors=None)[源代码]#
在shell中执行cmd的返回(exitcode,output)。
在带有“check_output”的shell中执行字符串“cmd”,并返回2元组(status,output)。区域设置编码用于解码输出并处理换行。
从输出中去除尾随换行符。可以根据函数“wait”的规则解释命令的退出状态。例子:
>>> import subprocess >>> subprocess.getstatusoutput('ls /bin/ls') (0, '/bin/ls') >>> subprocess.getstatusoutput('cat /bin/junk') (1, 'cat: /bin/junk: No such file or directory') >>> subprocess.getstatusoutput('/bin/junk') (127, 'sh: /bin/junk: not found') >>> subprocess.getstatusoutput('/bin/kill $$') (-15, '')
- run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False) CompletedProcess [源代码]#
用参数运行命令并返回一个完成的进程实例。
返回的实例将具有属性args、returncode、stdout和stderr。默认情况下,不会捕获stdout和stderr,这些属性将为none。传递stdout=pipe和/或stderr=pipe以捕获它们。如果check为true且退出代码为非零,则会引发一个被调用的ProcessError。CalledProcessError对象将在返回代码属性中包含返回代码,如果捕获了这些流,则输出&stderr属性。
如果超时,并且进程花费的时间太长,则将引发TimeoutExpired异常。
有一个可选参数“input”,允许您将字符串传递给子进程的stdin。如果使用此参数,则不能同时使用popen构造函数的“stdin”参数,因为它将在内部使用。其他参数与popen构造函数相同。如果传递universal_newlines=true,则“input”参数必须是字符串,并且返回对象中的stdout/stderr将是字符串而不是字节。
在 1.2a1 版本加入: 这个函数首先出现在Python3.5中。它在所有Python版本的gevent支持上都可用。
在 1.3a2 版本发生变更: 添加
capture_output
python 3.7中的参数。它会自动设置stdout
和stderr
到PIPE
. 将这些参数中的任何一个与capture_output
.