17 Mayıs 2009, Pazar
Nasıl 'gerçek' bir alt işlemi geri bilgi yok.Popen python (2.5)
Aşağıdaki şekilde alt süreci modülü kullanmak istiyorum:
- potansiyel olarak çalıştırmak için uzun bir zaman alır, yeni bir işlem oluşturun.
stdout
(ya dastderr
veya potansiyel olarak her ikisi de, ya beraber ya da ayrı olarak) yakalayın- Alt işlemi veri işlemgeliyor gibibelki de her satırda ateş olayları alınan (wxPython söz) ya da sadece onlara baskı.
Popen ile işlemler yaptım, ama eğer iletişim kullanırsam() veri işlem sonlandırıldı sonra bana bir anda gelir.
myprocess.stdout
(stdout = subprocess.PIPE
) readline()
bir engelleme yok o ayrı bir konu oluşturma süreci sona kadar bu yöntem ile herhangi bir satır ya da ben alamadım. (tamponboyu ben ne olursa olsun)
Bir şekilde korkunç değil. ve birden fazla platformda çalışan bu anlaşma var mı?
CEVAP
17 Mayıs 2009, Pazar
İş için değil görünen kod ile (windows zaten) güncelleme
class ThreadWorker(threading.Thread):
def __init__(self, callable, *args, **kwargs):
super(ThreadWorker, self).__init__()
self.callable = callable
self.args = args
self.kwargs = kwargs
self.setDaemon(True)
def run(self):
try:
self.callable(*self.args, **self.kwargs)
except wx.PyDeadObjectError:
pass
except Exception, e:
print e
if __name__ == "__main__":
import os
from subprocess import Popen, PIPE
def worker(pipe):
while True:
line = pipe.readline()
if line == '': break
else: print line
proc = Popen("python subprocess_test.py", shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout_worker = ThreadWorker(worker, proc.stdout)
stderr_worker = ThreadWorker(worker, proc.stderr)
stdout_worker.start()
stderr_worker.start()
while True: pass
Bunu Paylaş:
Nasıl Python ile birden fazla değer ge...
Python - Nasıl alt süreci içine bir di...
Nasıl Python 2.7 alt işlemi çıkış gizl...
'alt işlemi Popen arasındaki fark...
Python alt işlemi.Popen "OSError:...