在wait的文档(http://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait)中,它说:
警告
当使用 stdout=PIPE 和/或 stderr=PIPE 以及 子进程生成足够的输出到管道,使其阻塞 等待操作系统管道缓冲区接受更多数据。使用通信() 以避免这种情况。
由此看来,如果不需要
communicate
,我认为wait()
可以取代retcode
的所有用途。即使
stdout
或 stdin
不是 PIPE,我也可以用 wait()
替换 communicate()
。
是吗?谢谢!
我怀疑(从 2.6 开始,文档没有明确说明)在不使用 PIPE 的情况下,communicate() 会被简化为 wait()。因此,如果您不使用 PIPE,那么替换 wait() 应该没问题。
在您do使用PIPE的情况下,您可能会溢出内存缓冲区(请参阅communicate()注释),就像您可以填充操作系统管道缓冲区一样,因此,如果您正在处理大量管道缓冲区,则任何一种都不会起作用输出。
实际上,我已经沟通过(至少在 2.4 中),从基于行的输出的程序中每行给我一个字符,温和地说这是没有用的。
另外,“不需要重新编码”是什么意思? -- 我相信它设置 Popen.returncode 就像 wait() 一样。