+from subprocess import call
+ """ A class to simplify running external programs. """
+ def _run(self, command = , stdin = None, stdout = None, shell = False):
+ Don't call directly! Use kickoff.
+ Wrapper around subprocess.call. See
+ http://docs.python.org/library/subprocess.html for full details.
+ ret_code = call(command, stdin=stdin, stdout=stdout, shell=shell)
+ self.handle_ret_code(ret_code, command, stdin, stdout, shell)
+ def handle_ret_code(self, ret_code, command, stdin, stdout, shell):
+ Exception handler in case something breaks running an external command.
+ Should be overridden in child classes. Parameters are as in self.run,
+ with the exception of the first parameter, which is the actual return code
+ from the command execution.
+ raise RuntimeError("Command Failed!!!")
+ """ A shortcut method to call super on me. """
+ return super(type(self), self)
+ def kickoff(self, command = , stdin = None, stdout = None, shell = False):
+ Actually kick off a run of the command. Use this for interface
+ self._run(command, stdin, stdout, shell)