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

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

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

以下是一个小例子......

test.朋友

#!/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缓冲区是否已满并执行读取?

python subprocess stdout
1个回答
-1
投票

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

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