В python, как да проверя stdout от subprocess.Popen обект за нещо за четене? Пиша обвивка около инструмент, който понякога работи с часове без прекъсване. Използването на .readline() на stdout от дъщерния процес сериозно намалява скоростта на скрипта, когато се изпълнява за повече от няколко минути. Имам нужда от начин да проверя stdout по-ефективно, ако има нещо за четене. Между другото, този конкретен инструмент пише само цели редове наведнъж. Скриптът върви така:
#!/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