SORU
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:

  1. potansiyel olarak çalıştırmak için uzun bir zaman alır, yeni bir işlem oluşturun.
  2. stdout (ya da stderr veya potansiyel olarak her ikisi de, ya beraber ya da ayrı olarak) yakalayın
  3. 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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Cole Rolland

    Cole Rolland

    23 Kasım 2008
  • MndsgnVEVO

    MndsgnVEVO

    26 Kasım 2013
  • The Verge

    The Verge

    8 AĞUSTOS 2006