У меня есть сценарий для скриптов python для журналов, он непрерывно выводит найденные журналы и я хочу использовать linux pipe для фильтрации желаемого вывода. Пример:python Как использовать субпроцессный канал с оболочкой linux
$ python logsearch.py | grep timeout
Проблема заключается в том, что сортировка и wc блокируются до тех пор, пока logsearch.py не завершится, а logsearch.py будет непрерывно выводить результат.
образец logsearch.py:
p = subprocess.Popen("ping google.com", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
for line in p.stdout:
print(line)
UPDATE:
разобрался, просто изменить стандартный вывод в подпроцесс для sys.stdout, питон будет обрабатывать трубы для вас.
p = subprocess.Popen("ping -c 5 google.com", shell=True, stdout=**sys.stdout**)
Спасибо за помощь!
'ping -c 5' - нечетный пример скрипта, который работает вечно! Но, да, вы не можете сортировать вещи или подсчитывать количество вещей, пока не получите их всех. – tdelaney
@tdelaney Я удалил счетчик для ping, а вместо сортировки я использую grep, поэтому предположим, что данные должны поступать в конвейер grep через канал, но, похоже, он работает навсегда без печати. –
Вы ничего не получаете, потому что выход не соответствует таймауту. Попробуйте $ python logsearch.py | grep -v timeout –