什么时候应该在子流程中使用`wait`而不是`communicate`?

在等待文档(http://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait)中,它表示:

警告

当使用stdout = PIPE和/或stderr = PIPE时,这将会发生死锁,并且子进程会向管道生成足够的输出,从而阻止等待OS管道缓冲区接受更多数据。 使用通信()来避免这种情况。

由此,我认为communicate可以取代wait() 所有用法 ,如果不需要retcode话。 即使stdoutstdin不是PIPE,我也可以用communicate()替换wait() communicate()

是对的吗? 谢谢!


我怀疑(文档没有明确声明它是2.6),在你不使用PIPE进行通信的情况下()减少到wait()。 所以如果你使用PIPE,应该可以替换wait()。

使用管道可以溢出内存缓冲区(见通信()注)一样,你可以填补OS管道缓冲区,这样的情况下任何一个不会,如果你正在处理大量输出工作。

在一个实际的笔记中,我已经沟通过(至少在2.4版本中),每行给出一行字符,它们的输出是基于行的,这对我们来说没什么用处。

另外,你是什么意思的“retcode是不需要的”? - 我相信它会像wait()那样设置Popen.returncode。

链接地址: http://www.djcxy.com/p/77123.html

上一篇: When should I use `wait` instead of `communicate` in subprocess?

下一篇: Python monitoring stderr and stdout of a subprocess