Mercurial > treepkg > treepkg
diff treepkg/run.py @ 0:f78a02e79c84
initial checkin
author | Bernhard Herzog <bh@intevation.de> |
---|---|
date | Tue, 06 Mar 2007 17:37:32 +0100 |
parents | |
children | fee641fec94e |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/treepkg/run.py Tue Mar 06 17:37:32 2007 +0100 @@ -0,0 +1,49 @@ +# Copyright (C) 2007 by Intevation GmbH +# Authors: +# Bernhard Herzog <bh@intevation.de> +# +# This program is free software under the GPL (>=v2) +# Read the file COPYING coming with the software for details. + +"""Helper functions to run subprocesses in various ways""" + +import os +import subprocess + + +class SubprocessError(EnvironmentError): + + def __init__(self, command, returncode): + EnvironmentError.__init__(self, + "Command %r finished with return code %d" + % (command, returncode)) + self.returncode = returncode + + +def call(command, suppress_output=False, **kw): + """Run command as a subprocess and wait until it is finished. + + The command should be given as a list of strings to avoid problems + with shell quoting. If the command exits with a return code other + than 0, a SubprocessError is raised. + """ + if suppress_output: + kw["stdout"] = open(os.devnull, "w") + ret = subprocess.call(command, **kw) + if ret != 0: + raise SubprocessError(command, ret) + + +def capture_output(command, **kw): + """Return the stdout and stderr of the command as a string + + The command should be given as a list of strings to avoid problems + with shell quoting. If the command exits with a return code other + than 0, a SubprocessError is raised. + """ + proc = subprocess.Popen(command, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, **kw) + output = proc.communicate()[0] + if proc.returncode != 0: + raise SubprocessError(command, proc.returncode) + return output