wxPopen.py
changeset 232 83cc1a306560
parent 224 aae70ef5af6d
child 235 a66e150f2888
equal deleted inserted replaced
231:f1db3ce8f40a 232:83cc1a306560
    57             if self.callback : self.callback(outchunk)
    57             if self.callback : self.callback(outchunk)
    58         while outchunk != '' and not self.killed :
    58         while outchunk != '' and not self.killed :
    59             outchunk = self.fd.readline()
    59             outchunk = self.fd.readline()
    60         if self.endcallback:
    60         if self.endcallback:
    61             try:
    61             try:
    62             	err = self.Proc.wait()
    62                 err = self.Proc.wait()
    63             except:
    63             except:
    64                 err = self.retval
    64                 err = self.retval
    65             self.finished = True
    65             self.finished = True
    66             wx.CallAfter(self.endcallback, self.Proc.pid, err)
    66             wx.CallAfter(self.endcallback, self.Proc.pid, err)
    67 
    67 
    75                 word = word.strip()
    75                 word = word.strip()
    76                 if len(word) > 0:
    76                 if len(word) > 0:
    77                     self.Command.extend(word.split())
    77                     self.Command.extend(word.split())
    78             else:
    78             else:
    79                 self.Command.append(word)
    79                 self.Command.append(word)
    80         
    80 
    81         self.finish_callback = finish_callback
    81         self.finish_callback = finish_callback
    82         self.no_stdout = no_stdout
    82         self.no_stdout = no_stdout
    83         self.no_stderr = no_stderr
    83         self.no_stderr = no_stderr
    84         self.startupinfo = None
    84         self.startupinfo = None
    85         self.errlen = 0
    85         self.errlen = 0
   105 
   105 
   106         self.outt = outputThread(
   106         self.outt = outputThread(
   107                       self.Proc,
   107                       self.Proc,
   108                       self.Proc.stdout,
   108                       self.Proc.stdout,
   109                       self.output,
   109                       self.output,
   110                       self.finish)
   110                       self.finish) 
   111 
       
   112         self.outt.start()
   111         self.outt.start()
   113 
   112 
   114         self.errt = outputThread(
   113         self.errt = outputThread(
   115                       self.Proc,
   114                       self.Proc,
   116                       self.Proc.stderr,
   115                       self.Proc.stderr,
   117                       self.errors)
   116                       self.errors)
   118 #
   117         self.errt.start()
   119         self.errt.start()	
       
   120 
   118 
   121     def output(self,v):
   119     def output(self,v):
   122         self.outdata += v
   120         self.outdata += v
   123         self.outlen += 1
   121         self.outlen += 1
   124         if not self.no_stdout:
   122         if not self.no_stdout:
   128         self.errdata += v
   126         self.errdata += v
   129         self.errlen += 1
   127         self.errlen += 1
   130         if not self.no_stderr:
   128         if not self.no_stderr:
   131             wx.CallAfter(self.logger.write_warning,v)
   129             wx.CallAfter(self.logger.write_warning,v)
   132 
   130 
       
   131     def log_the_end(self,ecode,pid):
       
   132         self.logger.write(self.Command_str + "\n")
       
   133         self.logger.write_warning("exited with status %s (pid %s)\n"%(str(ecode),str(pid)))
       
   134 
   133     def finish(self, pid,ecode):
   135     def finish(self, pid,ecode):
   134         self.finished = True
   136         self.finished = True
   135         self.exitcode = ecode
   137         self.exitcode = ecode
   136         if self.exitcode != 0:
   138         if self.exitcode != 0:
   137             self.logger.write(self.Command_str + "\n")
   139             wx.CallAfter(self.log_the_end,ecode,pid)
   138             self.logger.write_warning("exited with status %s (pid %s)\n"%(str(ecode),str(pid)))
       
   139         if self.finish_callback is not None:
   140         if self.finish_callback is not None:
   140             self.finish_callback(self,ecode,pid)
   141             self.finish_callback(self,ecode,pid)
   141 
   142 
   142     def kill(self,signal=SIGTERM):
   143     def kill(self,signal=SIGTERM):
   143         self.outt.killed = True
   144         self.outt.killed = True
   150         else:
   151         else:
   151             try:
   152             try:
   152                 os.kill(self.Proc.pid, signal)
   153                 os.kill(self.Proc.pid, signal)
   153             except:
   154             except:
   154                 pass
   155                 pass
       
   156         self.outt.join()
       
   157         self.errt.join()
   155 
   158 
   156     def spin(self, timeout=None, out_limit=None, err_limit=None, keyword = None, kill_it = True):
   159     def spin(self, timeout=None, out_limit=None, err_limit=None, keyword = None, kill_it = True):
   157         count = 0
   160         count = 0
   158         while not self.finished:
   161         while not self.finished:
   159             if err_limit and self.errlen > err_limit:
   162             if err_limit and self.errlen > err_limit: