我正在尝试使用以下命令通过管道传送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
会连续循环,以便对数据进行缓冲。