diff options
author | Peter Astrand <astrand@lysator.liu.se> | 2005-01-01 09:36:35 (GMT) |
---|---|---|
committer | Peter Astrand <astrand@lysator.liu.se> | 2005-01-01 09:36:35 (GMT) |
commit | 454f76711c14f0a55119601bfe56a1ab5d2c0e04 (patch) | |
tree | f81416ce45244479ab525018c0b2078f8d591946 /Lib/subprocess.py | |
parent | ed2dbe3f3344038dee8389f0ade335da1b3b559a (diff) | |
download | cpython-454f76711c14f0a55119601bfe56a1ab5d2c0e04.zip cpython-454f76711c14f0a55119601bfe56a1ab5d2c0e04.tar.gz cpython-454f76711c14f0a55119601bfe56a1ab5d2c0e04.tar.bz2 |
New subprocess utility function: check_call. Closes #1071764.
Diffstat (limited to 'Lib/subprocess.py')
-rw-r--r-- | Lib/subprocess.py | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/Lib/subprocess.py b/Lib/subprocess.py index 40b04fe..da0c31b 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -133,6 +133,15 @@ call(*popenargs, **kwargs): retcode = call(["ls", "-l"]) +check_call(*popenargs, **kwargs): + Run command with arguments. Wait for command to complete. If the + exit code was zero then return, otherwise raise + CalledProcessError. The CalledProcessError object will have the + return code in the errno attribute. + + The arguments are the same as for the Popen constructor. Example: + + check_call(["ls", "-l"]) Exceptions ---------- @@ -148,6 +157,9 @@ should prepare for OSErrors. A ValueError will be raised if Popen is called with invalid arguments. +check_call() will raise CalledProcessError, which is a subclass of +OSError, if the called process returns a non-zero return code. + Security -------- @@ -363,6 +375,13 @@ import os import types import traceback +# Exception classes used by this module. +class CalledProcessError(OSError): + """This exception is raised when a process run by check_call() returns + a non-zero exit status. The exit status will be stored in the + errno attribute. This exception is a subclass of + OSError.""" + if mswindows: import threading import msvcrt @@ -393,7 +412,7 @@ else: import fcntl import pickle -__all__ = ["Popen", "PIPE", "STDOUT", "call"] +__all__ = ["Popen", "PIPE", "STDOUT", "call", "check_call", "CalledProcessError"] try: MAXFD = os.sysconf("SC_OPEN_MAX") @@ -428,6 +447,25 @@ def call(*popenargs, **kwargs): return Popen(*popenargs, **kwargs).wait() +def check_call(*popenargs, **kwargs): + """Run command with arguments. Wait for command to complete. If + the exit code was zero then return, otherwise raise + CalledProcessError. The CalledProcessError object will have the + return code in the errno attribute. + + The arguments are the same as for the Popen constructor. Example: + + check_call(["ls", "-l"]) + """ + retcode = call(*popenargs, **kwargs) + cmd = kwargs.get("args") + if cmd is None: + cmd = popenargs[0] + if retcode: + raise CalledProcessError(retcode, "Command %s returned non-zero exit status" % cmd) + return retcode + + def list2cmdline(seq): """ Translate a sequence of arguments into a command line |