代码之家  ›  专栏  ›  技术社区  ›  Gareth Davidson

Python中的流管道

  •  7
  • Gareth Davidson  · 技术社区  · 14 年前

    我正试图使用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 回复  |  直到 14 年前
        1
  •  7
  •   fabmilo    14 年前

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

    改用这个:

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