В python, как мне проверить стандартный вывод из объекта subprocess.Popen на наличие чего-либо для чтения? Я пишу оболочку для инструмента, который иногда работает часами подряд. Использование .readline() в стандартном выводе из дочернего процесса сильно снижает скорость скрипта, если он выполняется дольше нескольких минут. Мне нужен способ более эффективно проверять стандартный вывод, если есть что читать. Кстати, этот конкретный инструмент записывает только полные строки за раз. Сценарий выглядит следующим образом:
#!/usr/bin/python -u
#thiswrap.py
import sys, time
from subprocess import *
chldp = Popen(sys.argv[1], bufsize=0, stdout=PIPE, close_fds=True)
chstdin,chstdout=chldp.stdin,chldp.stdout
startnoti=False
while not chldp.poll():
rrl=chstdout.readline() # <--- this is where the problem is
if rrl[-8:]=='REDACTED TEXT':
sys.stdout.write(rrl[:-1]+' \r')
if not startnoti: startnoti=True
else:
if startnoti: sys.stdout.write('\n')
sys.stdout.write(rrl)
if startnoti: # REDACTED
time.sleep(0.1)
time.sleep(0.1)
Любые идеи?
readline
заблокировать? А почему ты звонишьsleep
? - person Vebjorn Ljosa   schedule 08.08.2011