equal
deleted
inserted
replaced
107 self.exitcode = None |
107 self.exitcode = None |
108 self.outdata = [] |
108 self.outdata = [] |
109 self.errdata = [] |
109 self.errdata = [] |
110 self.keyword = keyword |
110 self.keyword = keyword |
111 self.kill_it = kill_it |
111 self.kill_it = kill_it |
|
112 self.startsem = Semaphore(0) |
112 self.finishsem = Semaphore(0) |
113 self.finishsem = Semaphore(0) |
113 self.endlock = Lock() |
114 self.endlock = Lock() |
114 |
115 |
115 popenargs= { |
116 popenargs= { |
116 "cwd":os.getcwd() if cwd is None else cwd, |
117 "cwd":os.getcwd() if cwd is None else cwd, |
143 self.errt = outputThread( |
144 self.errt = outputThread( |
144 self.Proc, |
145 self.Proc, |
145 self.Proc.stderr, |
146 self.Proc.stderr, |
146 self.errors) |
147 self.errors) |
147 self.errt.start() |
148 self.errt.start() |
|
149 self.startsem.release() |
148 |
150 |
149 |
151 |
150 def output(self,v): |
152 def output(self,v): |
151 self.outdata.append(v) |
153 self.outdata.append(v) |
152 self.outlen += 1 |
154 self.outlen += 1 |
166 def log_the_end(self,ecode,pid): |
168 def log_the_end(self,ecode,pid): |
167 self.logger.write(self.Command_str + "\n") |
169 self.logger.write(self.Command_str + "\n") |
168 self.logger.write_warning(_("exited with status %s (pid %s)\n")%(str(ecode),str(pid))) |
170 self.logger.write_warning(_("exited with status %s (pid %s)\n")%(str(ecode),str(pid))) |
169 |
171 |
170 def finish(self, pid,ecode): |
172 def finish(self, pid,ecode): |
|
173 self.startsem.acquire() |
171 if self.timeout: |
174 if self.timeout: |
172 self.timeout.cancel() |
175 self.timeout.cancel() |
173 self.exitcode = ecode |
176 self.exitcode = ecode |
174 if self.exitcode != 0: |
177 if self.exitcode != 0: |
175 self.log_the_end(ecode,pid) |
178 self.log_the_end(ecode,pid) |
177 self.finish_callback(self,ecode,pid) |
180 self.finish_callback(self,ecode,pid) |
178 self.errt.join() |
181 self.errt.join() |
179 self.finishsem.release() |
182 self.finishsem.release() |
180 |
183 |
181 def kill(self,gently=True): |
184 def kill(self,gently=True): |
|
185 self.startsem.acquire() |
182 self.outt.killed = True |
186 self.outt.killed = True |
183 self.errt.killed = True |
187 self.errt.killed = True |
184 if wx.Platform == '__WXMSW__': |
188 if wx.Platform == '__WXMSW__': |
185 PROCESS_TERMINATE = 1 |
189 PROCESS_TERMINATE = 1 |
186 handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, self.Proc.pid) |
190 handle = ctypes.windll.kernel32.OpenProcess(PROCESS_TERMINATE, False, self.Proc.pid) |