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()