Grep поток вывода Python (пробовал print и stdout) - PullRequest
0 голосов
/ 06 февраля 2019

Этот ответ говорит, что это так же просто, как:

труба Python протоколирование вывода потока stdout в grep

python main.py 2>&1 | grep INFO

У меня есть следующеефайл, который я пробовал с print() и sys.stdout.write().

import sys
from time import sleep

while True:
    sleep(1)
    sys.stdout.write("this is a thing")
    # Also tried print()

Я пытаюсь собрать "thing" с:

python output.py 2>&1 | grep "thing"

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019
while True:
    sleep(1)
    print("this is a thing", flush=True)

Будет работать также, не нужно напрямую работать с stdout.

По умолчанию print использует буфер для вывода, просто сбрасывая его при каждом вызове, вы получите потоковую передачу в реальном времени.

0 голосов
/ 06 февраля 2019

в качестве дополнения: если бы вывод шел в stderr, в данном случае это не так, вы все равно увидите его в терминале, потому что pipe |только перенаправляет стандартный вывод, если вы не укажете, в противном случае остальная часть нефильтруется на терминал

0 голосов
/ 06 февраля 2019

Вам нужно использовать newline, а лучше flush stdout.

import sys
from time import sleep

while True:
    sys.stdout.write("this is a thing\n")
    sys.stdout.flush()
    sleep(1)
...