当使用具有大量输出到stdout的子流程时,Python代码会挂起

时间:2019-04-17 08:53:29

标签: python subprocess stdout

我有一个子进程,可以将大量数据输出到stdout。当生成太多数据时,由于它正在等待stdout缓冲区被清空,导致子进程挂起。

这是下面的一个小例子...

test.py

#!/usr/local/bin/python2.7

# test.py

import subprocess

proc = subprocess.Popen(["python","./_ping_con.py"], stdout = subp.PIPE)

while proc.poll() is None:
    pass

print proc.stdout.read()

...以及子流程:

#!/usr/local/bin/python2.7

# _ping_con.py

print(96000 * "*")   # Hangs here because it's too much data for the stdout pipe

我想知道的是,是否可以扩展此缓冲区以允许处理更多数据?如果不是,是否可以通过其他方式发送数据来避免此问题?或者在主要过程中,是否有办法判断stdout缓冲区是否已满并进行读取?

1 个答案:

答案 0 :(得分:-1)

我最终要做的是将所有输出写入一个临时文件,然后将文件名传递回父级。效果很好!