我正在尝试从bash命令获得实时输出,以便我可以更轻松地使用数据。
在此代码中,命令MAX_SIZE
正常工作,并在1秒后打印输出。命令iostat 1
在命令行上按预期运行(每秒打印1行,最多20行),等待命令完成~20秒,然后以0.1秒的延迟打印每一行。
我计划无限期地运行这些命令,并且需要这部分才能工作。关于什么错误的想法?我在OSX上。
sar -u 1 20
答案 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