def __init__(self, popen, run_as): self.popen = popen self.stdin = popen.stdin self.stdout = popen.stdout self.stderr = popen.stderr self.input_fd = None self.run_as = run_as self.stdout_reader = AsyncPipeReader(self.stdout) self.stderr_reader = AsyncPipeReader(self.stderr) self.stdout_reader.start() self.stderr_reader.start()
class PopenWrapper(object): STDIN = 1 STDOUT = 2 STDERR = 3 TRANSPORT = 4 def __init__(self, popen, run_as): self.popen = popen self.stdin = popen.stdin self.stdout = popen.stdout self.stderr = popen.stderr self.input_fd = None self.run_as = run_as self.stdout_reader = AsyncPipeReader(self.stdout) self.stderr_reader = AsyncPipeReader(self.stderr) self.stdout_reader.start() self.stderr_reader.start() def set_input_fd(self, input_socket): self.input_fd = None # input_socket.fd() # Not Implemented Yet def select(self, timeout=0): ret = [] if self.input_fd and self.input_fd.poll(timeout): ret.append(self.TRANSPORT) if self.stdout_reader.has_data(): ret.append(self.STDOUT) if self.stderr_reader.has_data(): ret.append(self.STDERR) return ret def read_out(self): return self.stdout_reader.read() def read_err(self): return self.stderr_reader.read() def write(self, data): self.stdin.write(data) def finalize(self): stdout, stderr = '', '' try: try: if self.popen.poll() is None: final_stdout, final_stderr = self.popen.communicate() stdout = final_stdout stderr = final_stderr except: pass ret_code = self.popen.returncode return (ret_code, stdout, stderr) finally: self.stdout_reader.close() self.stderr_reader.close() # override methods def poll(self): return self.popen.poll() def kill(self): return self.popen.kill() def terminate(self): return self.popen.terminate()