【发布时间】:2016-09-23 09:40:36
【问题描述】:
从Popen.wait()的文档中,我明白了
警告这将在使用 stdout=PIPE 和/或 stderr=PIPE 时出现死锁 并且子进程向管道生成足够的输出,使其 等待 OS 管道缓冲区接受更多数据的块。采用 communicate() 来避免这种情况。
我在理解下面的行为时遇到了一些麻烦,因为下面运行的 command 会产生相当多的标准输出。
然而,我注意到的是
subproc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
将挂起。
虽然
subproc = subprocess.Popen(command, stdout=subprocess.PIPE)
不会挂起。
如果command 正在生成大量标准输出,为什么第二条语句没有挂起,因为我们仍在使用stdout=subprocess.PIPE?
【问题讨论】: