Python中的流式管道
我正在尝试用Python把vmstat的输出转换成CSV文件,所以我用了一些代码来转换成CSV,并把日期和时间作为列添加进去:
vmstat 5 | python myscript.py >> vmstat.log
我遇到的问题是,在尝试读取sys.stdin时,它会卡住。看起来输入缓冲区没有被清空。我不想无休止地循环,这样会浪费处理器时间,因为我正试图测量这个。这里有一个简单的示例,卡在第3行:
import sys
for line in sys.stdin:
sys.stdout.write(line)
sys.stdout.flush()
有没有简单的方法可以像grep那样立即访问数据流,而不需要在输入缓冲区填满时暂停?
1 个回答
7
VMstat 5这个命令不会关闭标准输出,所以Python的缓冲区还在等着更多的数据。
可以用这个来代替:
for line in iter(sys.stdin.readline, ""):
print line