import subprocess class CommandError(subprocess.CalledProcessError): def __init__(self,retcode,command,output): subprocess.CalledProcessError.__init__(self,retcode,command) self.output=output def __str__(self): return "Command '%s' returned non-zero exit status %d:\n%s" % (self.cmd, self.returncode,self.output) def execute(command, ignore_error = False, fork = False ): stdout = subprocess.PIPE stderr = subprocess.STDOUT if fork: stdout = None stderr = None process=subprocess.Popen(command,stdout=stdout,stderr=stderr,shell=True, universal_newlines = True,executable="/bin/bash") if fork: return None output = process.communicate() retcode = process.poll() if retcode and not ignore_error: raise CommandError(retcode, command, output[0]) return output