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

问题描述 投票:0回答:1

在wait的文档(http://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait)中,它说:

警告

当使用 stdout=PIPE 和/或 stderr=PIPE 以及 子进程生成足够的输出到管道,使其阻塞 等待操作系统管道缓冲区接受更多数据。使用通信() 以避免这种情况。

由此看来,如果不需要

communicate
,我认为wait()可以取代
retcode
所有用途
。即使
stdout
stdin
不是 PIPE,我也可以用
wait()
替换
communicate()

是吗?谢谢!

python subprocess pipe wait
1个回答
7
投票

我怀疑(从 2.6 开始,文档没有明确说明)在不使用 PIPE 的情况下,communicate() 会被简化为 wait()。因此,如果您使用 PIPE,那么替换 wait() 应该没问题。

在您do使用PIPE的情况下,您可能会溢出内存缓冲区(请参阅communicate()注释),就像您可以填充操作系统管道缓冲区一样,因此,如果您正在处理大量管道缓冲区,则任何一种都不会起作用输出。

实际上,我已经沟通过(至少在 2.4 中),从基于行的输出的程序中每行给我一个字符,温和地说这是没有用的。

另外,“不需要重新编码”是什么意思? -- 我相信它设置 Popen.returncode 就像 wait() 一样。

© www.soinside.com 2019 - 2024. All rights reserved.