Python中的流媒体管道

Gar*_*son 7 python

我正在尝试使用Python将vmstat的输出转换为CSV文件,因此我使用类似的东西转换为CSV并将日期和时间添加为coloumns:

vmstat 5 | python myscript.py >> vmstat.log
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是它在尝试迭代sys.stdin时阻塞.似乎输入缓冲区没有被刷新.我不想无休止地循环并烧掉处理器时间,因为我正在尝试测量它.这是一个简单的演示,在第3行阻止:

import sys

for line in sys.stdin:
    sys.stdout.write(line)
    sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

是否有一种简单的方法可以像grep一样立即访问流,而不会在输入缓冲区填满时暂停?

fab*_*ioM 7

VMstat 5,不关闭stdout,因此python缓冲区仍在等待更多数据.

请改用:

for line in iter(sys.stdin.readline, ""):
    print line
Run Code Online (Sandbox Code Playgroud)

  • 是的,您只需要更改从stdin读取的方式,然后查看编辑 (2认同)