【发布时间】:2012-11-11 10:24:03
【问题描述】:
在等待的文档中(http://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait),它说:
警告
当使用 stdout=PIPE 和/或 stderr=PIPE 和 子进程向管道生成足够的输出,使其阻塞 等待操作系统管道缓冲区接受更多数据。使用通信() 避免这种情况。
据此,我认为如果不需要retcode,communicate 可以替换wait() 的所有用法。即使stdout 或stdin 不是PIPE,我也可以将wait() 替换为communicate()。
对吗?谢谢!
【问题讨论】:
-
communicate是一种方便的方法,它隐藏了使用轮询、选择或线程 (Windows) 对管道进行读/写的平台相关细节。它最后调用wait。如果它适合您的需要,请使用它,但更复杂的管道可能需要手动处理管道,或使用中间wait。 -
@eryksun
wait()的性能会比communicate()更好吗? -
我可以想象这样一种情况,您决定在子进程完成运行之前关闭子进程的管道。当(稍后)您想确保它已完成时,wait() 将起作用,但不是communicate(),因为它会被已经关闭的管道混淆。
标签: python subprocess pipe wait communicate