Потоковые каналы в Python - PullRequest
7 голосов
/ 15 ноября 2010

Я пытаюсь преобразовать вывод vmstat в файл CSV, используя Python, поэтому я использую что-то вроде этого, чтобы преобразовать в 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 голосов
/ 15 ноября 2010

VMstat 5, не закрывает стандартный вывод, поэтому буфер python все еще ожидает дополнительных данных.

Используйте это вместо:

for line in iter(sys.stdin.readline, ""):
    print line
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...