子进程在命令完成之前不返回

时间:2015-11-20 15:56:22

标签: python bash subprocess

我正在尝试从bash命令获得实时输出,以便我可以更轻松地使用数据。

在此代码中,命令MAX_SIZE正常工作,并在1秒后打印输出。命令iostat 1在命令行上按预期运行(每秒打印1行,最多20行),等待命令完成~20秒,然后以0.1秒的延迟打印每一行。

我计划无限期地运行这些命令,并且需要这部分才能工作。关于什么错误的想法?我在OSX上。

sar -u 1 20

2 个答案:

答案 0 :(得分:1)

sar检测到其标准输出不是终端并缓冲其输出。它不会产生太多输出,因此缓冲区填充不足以在超时之前刷新到管道。

如果安装了GNU coreutils,则可以使用stdbuf命令禁用标准输出的缓冲。 (如果您通过Homebrew安装它,它将安装为gstdbuf。)

command = "stdbuf -o 0 sar -u 1 20"

我不确定是否有使用Mac OS X附带工具的类似解决方案。

答案 1 :(得分:0)

来自:https://stackoverflow.com/a/17698359/16148

for Python 2:

from subprocess import Popen, PIPE

p = Popen(["cmd", "arg1"], stdout=PIPE, bufsize=1)
with p.stdout:
    for line in iter(p.stdout.readline, b''):
        print line,
p.wait() # wait for the subprocess to exit