我正在尝试使用以下命令通过管道传送iostat,mongostat等实用程序的输出:

$ iostat -d 1 | ./script.py


我在其中使用代码:

for line in sys.stdin:
    print line


我看到它挂起了,并且没有将每行打印到控制台。
如果我运行时不带标志重复执行仅输出一次的第二个“ -d 1”,则脚本的行为与预期的一样。

$ iostat | ./script.py

最佳答案

数据正在缓冲中,可以在iter上调用sys.stdout.readline

import sys
for line in iter(sys.stdin.readline,""):
    print line


单独运行iostat只会输出几行,iostat -d 1会连续循环,以便对数据进行缓冲。

10-04 19:48