Python betiğim, çok gürültülü bir linux yardımcı programını çağırmak için alt süreci kullanır. Tüm çıktıları bir günlük dosyasına kaydetmek ve bir kısmını kullanıcıya göstermek istiyorum. Aşağıdakilerin işe yarayacağını düşündüm, ancak yardımcı program önemli miktarda çıktı üretene kadar çıktı uygulamamda 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()
Gerçekten istediğim davranış, filtre komut dosyasının alt satırdan alındığı gibi her satırı yazdırmasıdır. Ne tee
gibi ama python kodu ile sorta.
Neyi kaçırıyorum? Bu mümkün mü?
Güncelleme:
sys.stdout.flush()
Fake_utility.py dosyasına a eklenirse, kod python 3.1'de istenen davranışa sahiptir. Python 2.6 kullanıyorum. Kullanmanın proc.stdout.xreadlines()
py3k ile aynı işe yarayacağını düşünürdünüz, ancak işe yaramaz.
Güncelleme 2:
İşte asgari çalışma kodu.
#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()
print line,
yerine kullanabilirsinizprint line.rstrip()
(not: sonunda virgül).