okuma alt işlemi satır satır stdout
Benim python betiği alt işlemi çok gürültülü bir linux programı çağırmak için kullanır. Bir günlük dosyası çıktı hepsini saklamak istiyorum ve kullanıcıya göstermek. Aşağıdaki çalışacağını düşünmüştüm, ama çıkış yardımcı çıkış önemli miktarda üretti kadar uygulamam görünmüyor.
#fake_utility.py, just generates lots of output over time
import time
i = 0
while True:
print hex(i)*512
i = 1
time.sleep(0.5)
#filters output
import subprocess
proc = subprocess.Popen(['python','fake_utility.py'],stdout=subprocess.PIPE)
for line in proc.stdout:
#the real code does filtering here
print "test:", line.rstrip()
Asıl istediğim davranış filtre script alt işlemi alınan her satırı yazdırmak için. tee
ama python kodu ile ne gibi sayılır.
Neyi kaçırıyorum? Bu mümkün olabilir mi?
Güncelleme:
Eğer sys.stdout.flush()
fake_utility.py python 3.1 istenilen davranış kodu eklenir. Python 2.6 kullanıyorum. proc.stdout.xreadlines()
kullanarak py3k, ama yok aynı işi yaptığını düşünebilirsiniz.
Güncelleme 2:
Burada en az çalışan kod.
#fake_utility.py, just generates lots of output over time
import sys, time
for i in range(10):
print i
sys.stdout.flush()
time.sleep(0.5)
#display out put line by line
import subprocess
proc = subprocess.Popen(['python','fake_utility.py'],stdout=subprocess.PIPE)
#works in python 3.0
#for line in proc.stdout:
for line in iter(proc.stdout.readline,''):
print line.rstrip()
CEVAP
Ben geçen Python ile çalışalı uzun zaman oldu ama sorun deyimiyle bence üzerinde yineleme önce tüm giriş okur for line in proc.stdout
,. Çözüm readline()
yerine kullanmak için:
#filters output
import subprocess
proc = subprocess.Popen(['python','fake_utility.py'],stdout=subprocess.PIPE)
while True:
line = proc.stdout.readline()
if line != '':
#the real code does filtering here
print "test:", line.rstrip()
else:
break
Hala alt işlemi ile uğraşmak zorunda dersin' tampon.
Not: according to the documentation Bu çözüm ile bir yineleyici olmalıdır eşdeğer kullanarak readline()
dışında, önceden okuma arabelleği, ama (ya da tam olarak bu) önerilen değişiklik yaptı üretmek farklı sonuçlar için bana (Python 2.5 üzerinde Windows XP).
Bir node.js bir defada bir satır dosya...
GZİPİnputStream satır satır okuma...
Python ile yeni satır ile ayrılmış dos...
Neden Standart girdiden okuma satır Py...
Python: okuma diziye satır satır dosya...