[英]In Python multiprocessing, what happens to stdout when subprocess exists cleanly?
我有一个 python 2.7 脚本,我从中打开一个带有 Popen 和 stdout=PIPE 和 stderr=STDOUT 的子进程。
启动子进程后,我的主脚本会做一些其他工作,然后在子进程上执行 p.communicate() 。 在启动子进程和调用 communicate 之间经过的时间里,我的子进程已经完成了它的工作并且干净地退出了,但是 communicate 仍然可以从它的标准输出中读取。 当我的子进程完成运行时发生了什么,它的标准输出和标准错误将打开多长时间?
在这种情况下, stdout
和stderr
上的字节只是缓冲在内存中,等待您从缓冲区中读取。 当您调用p.communicate()
时,它会读取缓冲区并返回包含分别来自 stdout 和 stderr 的数据的两个 Python 对象的元组。 当您组合 stdout 和 stderr 时,就像您在此处所做的那样,元组中返回的第二个值将始终为None
,所有数据都出现在元组的第一个值中,交错。
如subprocess.communicate
文档中所警告,如果进程可以产生大量输出,则必须小心不要溢出缓冲区。
注意:读取的数据缓存在内存中,如果数据量很大或没有限制,请不要使用此方法。
调用p.communicate()
也是一个阻塞调用,等待进程终止。 返回后,将关闭 stdout/stderr 并设置整数p.returncode
属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.