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 |