2011-02-23 21 views
5

Bir GUI uygulaması (wxPython) oluşturuyorum. GUI uygulamasından başka bir (.exe) uygulamayı çalıştırmam gerekiyor. Alt işlem bir kullanıcı eyleminde bazı işlemleri gerçekleştirecek ve bir çıktıyı GUI uygulamasına döndürecektir.Farklı bir iş parçacığı üzerinde başka bir işlem nasıl çalıştırılır

Bu alt işlemi bir döngü içinde çalıştırıyorum, böylece alt işlem sürekli olarak yürütülür. Yaptığım şey bir iş parçacığı (yani gui donmuyor) ve bir döngüde alt işlemini başlatıyorum. Bunun en iyi yol olup olmadığından emin değil. Ana uygulama kapatma ise

self.thread = threading.Thread(target=self.run, args=()) 
self.thread.setDaemon(True) 
self.thread.start() 

def run(self): 
     while self.is_listening: 
      cmd = ['application.exe'] 
      proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
      proc.wait() 
      data = "" 
      while True: 
       txt = proc.stdout.readline() 
        data = txt[5:].strip() 
        txt += data 

Şimdi ise ne olur, iplik hala gelmedi bir kullanıcı eylemi bekliyor. Temiz bir şekilde nasıl çıkabilirim? GUI uygulaması çıktıktan sonra bile uygulama.exe işlemi işlem listesinde görülebilir. Her şeyi geliştirmek için herhangi bir öneri bekliyoruz.

sayesinde

+2

Neden wx.Process'/'wx.Execute()' kullanmıyorsunuz? –

cevap

2

1) ('proc' bir örnek niteliği olun, bu yüzden o sonlandırmak() veya öldürecek çağırabilir) çıkmadan önce yöntemler.

self.thread = threading.Thread(target=self.run, args=()) 
self.thread.setDaemon(True) 
self.thread.start() 

def run(self): 
    while self.is_listening: 
     cmd = ['application.exe'] 
     self.proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
     self.proc.wait() 
     data = "" 
     while True: 
      txt = self.proc.stdout.readline() 
      data = txt[5:].strip() 
      txt += data 

2) durdurmak için iplik anlatmak için bazı değişkeni kullanın yerine bekleyin (kullanmak yerine, bir döngü içinde (Sen (anket kullanmanız gerekecektir))).

self.exit = False 
self.thread = threading.Thread(target=self.run, args=()) 
self.thread.setDaemon(True) 
self.thread.start() 

def run(self): 
    while self.is_listening: 
     cmd = ['application.exe'] 
     proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
     while proc.poll() is None or not self.exit: 
      pass 
     data = "" 
     while True: 
      if self.exit: 
       break 
      txt = proc.stdout.readline() 
      data = txt[5:].strip() 
      txt += data 

'atexit' module documentation

çıkışında şeyler arayarak size yardımcı olabilir.

İlgili konular