Adds a subprocess.check_call_output() function to return the output from a
process on success or raise an exception on error.
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index e7ba26f..878b79b 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -72,6 +72,40 @@
else:
self.fail("Expected CalledProcessError")
+ def test_check_call_output(self):
+ # check_call_output() function with zero return code
+ output = subprocess.check_call_output(
+ [sys.executable, "-c", "print 'BDFL'"])
+ self.assertTrue('BDFL' in output)
+
+ def test_check_call_output_nonzero(self):
+ # check_call() function with non-zero return code
+ try:
+ subprocess.check_call_output(
+ [sys.executable, "-c", "import sys; sys.exit(5)"])
+ except subprocess.CalledProcessError, e:
+ self.assertEqual(e.returncode, 5)
+ else:
+ self.fail("Expected CalledProcessError")
+
+ def test_check_call_output_stderr(self):
+ # check_call_output() function stderr redirected to stdout
+ output = subprocess.check_call_output(
+ [sys.executable, "-c", "import sys; sys.stderr.write('BDFL')"],
+ stderr=subprocess.STDOUT)
+ self.assertTrue('BDFL' in output)
+
+ def test_check_call_output_stdout_arg(self):
+ # check_call_output() function stderr redirected to stdout
+ try:
+ output = subprocess.check_call_output(
+ [sys.executable, "-c", "print 'will not be run'"],
+ stdout=sys.stdout)
+ except ValueError, e:
+ self.assertTrue('stdout' in e.args[0])
+ else:
+ self.fail("Expected ValueError when stdout arg supplied.")
+
def test_call_kwargs(self):
# call() function with keyword args
newenv = os.environ.copy()