在等待文件(http://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait)中,它说:
警告
当使用stdout = PIPE和/或stderr = PIPE和时,这将会死锁 子进程为管道生成足够的输出,使其阻塞 等待OS管道缓冲区接受更多数据。使用沟通() 为了避免这种情况。
据此,如果不需要communicate
,我认为wait()
可以取代retcode
的所有用途。即使stdout
或stdin
不是PIPE,我也可以将wait()
替换为communicate()
。
是吗?谢谢!
答案 0 :(得分:6)
我怀疑(文档在2.6中没有明确说明)在你不使用PIPEs的情况下()减少为wait()。因此,如果您不使用PIPE,则可以替换wait()。
如果您执行使用PIPE,您可以溢出内存缓冲区(请参阅communic()注释),就像您可以填充OS管道缓冲区一样,因此如果您使用任何一个都无法工作“处理大量输出。
实际上,我已经进行了沟通(至少在2.4中),从输出基于行的程序中每行给出一个字符,这对于温和地说是没用的。
另外,“不需要重新编码”是什么意思? - 我相信它就像wait()一样设置Popen.returncode。