当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python subprocess.Popen.communicate用法及代码示例


用法:

Popen.communicate(input=None, timeout=None)

与进程交互:将数据发送到标准输入。从 stdout 和 stderr 读取数据,直到到达文件结尾。等待进程终止并设置returncode 属性。可选的 input 参数应该是要发送到子进程的数据,或者 None ,如果不应该向子进程发送数据。如果流以文本模式打开,input 必须是字符串。否则,它必须是字节。

communicate() 返回一个元组 (stdout_data, stderr_data) 。如果流以文本模式打开,则数据将是字符串;否则,字节。

请注意,如果要将数据发送到进程的标准输入,则需要使用 stdin=PIPE 创建 Popen 对象。同样,要在结果元组中获得除 None 以外的任何内容,您还需要提供 stdout=PIPE 和/或 stderr=PIPE

如果进程在 timeout 秒后没有终止,则会引发 TimeoutExpired 异常。捕获此异常并重试通信不会丢失任何输出。

如果超时到期,子进程不会被杀死,因此为了正确清理well-behaved应用程序应该杀死子进程并完成通信:

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

注意

读取的数据是缓存在内存中的,所以如果数据量很大或者没有限制,不要使用这种方法。

在 3.3 版中更改:timeout加入。

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 subprocess.Popen.communicate。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。