import subprocess, os, signal, time import logging class Subprocess: class Error(Exception): pass def __init__(self, cmd, as_root=False): global process process.append(self) self.cmd = cmd self.as_root = as_root if as_root: cmd = 'gksudo "%s"' % cmd logging.info("cmd: " + cmd) self.ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) time.sleep(0) #rcode = self.ps.poll() #print ':::::::->', rcode if self.ps.returncode not in [None, 0]: raise Subprocess.Error(cmd, self.ps.returncode, self.ps.stderr.read()) self.stdout = self.ps.stdout self.wait = self.ps.wait def kill(self, n=signal.SIGQUIT): if self.ps.poll() != None: return os.kill(self.ps.pid, n) process = [] def killall(): for p in process: p.kill()