wxPopen.py
changeset 421 c9ec111ad275
parent 361 331d698e1118
child 424 86a7c1d11bbd
equal deleted inserted replaced
420:c093ec48f2fd 421:c9ec111ad275
    62             try:
    62             try:
    63                 err = self.Proc.wait()
    63                 err = self.Proc.wait()
    64             except:
    64             except:
    65                 err = self.retval
    65                 err = self.retval
    66             self.finished = True
    66             self.finished = True
    67             wx.CallAfter(self.endcallback, self.Proc.pid, err)
    67             self.endcallback(self.Proc.pid, err)
    68 
    68         
    69 class ProcessLogger:
    69 class ProcessLogger:
    70     def __init__(self, logger, Command, finish_callback=None, no_stdout=False, no_stderr=False, no_gui=True):
    70     def __init__(self, logger, Command, finish_callback=None, no_stdout=False, no_stderr=False, no_gui=True):
    71         self.logger = logger
    71         self.logger = logger
    72         self.Command_str = Command
    72         self.Command_str = Command
    73         self.Command = []
    73         self.Command = []
   119 
   119 
   120     def output(self,v):
   120     def output(self,v):
   121         self.outdata += v
   121         self.outdata += v
   122         self.outlen += 1
   122         self.outlen += 1
   123         if not self.no_stdout:
   123         if not self.no_stdout:
   124             wx.CallAfter(self.logger.write,v)
   124             if wx.GetApp() is None:
   125 
   125                 self.logger.write(v)
       
   126             else:
       
   127                 wx.CallAfter(self.logger.write,v)
       
   128             
   126     def errors(self,v):
   129     def errors(self,v):
   127         self.errdata += v
   130         self.errdata += v
   128         self.errlen += 1
   131         self.errlen += 1
   129         if not self.no_stderr:
   132         if not self.no_stderr:
   130             wx.CallAfter(self.logger.write_warning,v)
   133             if wx.GetApp() is None:
       
   134                 self.logger.write_warning(v)
       
   135             else:
       
   136                 wx.CallAfter(self.logger.write_warning,v)
   131 
   137 
   132     def log_the_end(self,ecode,pid):
   138     def log_the_end(self,ecode,pid):
   133         self.logger.write(self.Command_str + "\n")
   139         self.logger.write(self.Command_str + "\n")
   134         self.logger.write_warning(_("exited with status %s (pid %s)\n")%(str(ecode),str(pid)))
   140         self.logger.write_warning(_("exited with status %s (pid %s)\n")%(str(ecode),str(pid)))
   135 
   141 
   136     def finish(self, pid,ecode):
   142     def finish(self, pid,ecode):
   137         self.finished = True
   143         self.finished = True
   138         self.exitcode = ecode
   144         self.exitcode = ecode
   139         if self.exitcode != 0:
   145         if self.exitcode != 0:
   140             wx.CallAfter(self.log_the_end,ecode,pid)
   146             if wx.GetApp() is None:
       
   147                 self.log_the_end(ecode,pid)
       
   148             else:
       
   149                 wx.CallAfter(self.log_the_end,ecode,pid)
   141         if self.finish_callback is not None:
   150         if self.finish_callback is not None:
   142             self.finish_callback(self,ecode,pid)
   151             self.finish_callback(self,ecode,pid)
   143 
   152 
   144     def kill(self,gently=True):
   153     def kill(self,gently=True):
   145         self.outt.killed = True
   154         self.outt.killed = True
   172                 if count > timeout:
   181                 if count > timeout:
   173                     break
   182                     break
   174                 count += 1
   183                 count += 1
   175             if keyword and self.outdata.find(keyword)!=-1:
   184             if keyword and self.outdata.find(keyword)!=-1:
   176                     break
   185                     break
   177             wx.Yield()
   186             app = wx.GetApp()
       
   187             if app is not None:
       
   188                 app.Yield()
   178             time.sleep(0.01)
   189             time.sleep(0.01)
   179 
   190 
   180         if not self.outt.finished and kill_it:
   191         if not self.outt.finished and kill_it:
   181             self.kill()
   192             self.kill()
   182 
   193