summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Golden <mail@timgolden.me.uk>2013-11-03 14:20:23 +0000
committerTim Golden <mail@timgolden.me.uk>2013-11-03 14:20:23 +0000
commit49667f09a72a3a33e5e0598233ce5a3d971f52e9 (patch)
treec8d0df1a0bc09bafea1e257b220e0bac1e770a25
parent0b9e815d8dfab1844d8095b916e0ccb75d7bf3da (diff)
parente004175c5694804c263f0f06e7a4e3bbc6852cc4 (diff)
downloadcpython-git-49667f09a72a3a33e5e0598233ce5a3d971f52e9.tar.gz
Issue #10197: merge heads
-rw-r--r--Lib/subprocess.py24
-rw-r--r--Lib/test/test_subprocess.py11
-rw-r--r--Misc/NEWS3
3 files changed, 14 insertions, 24 deletions
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index 376b50546b..aec39d4947 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -681,21 +681,15 @@ def getstatusoutput(cmd):
>>> subprocess.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
"""
- with os.popen('{ ' + cmd + '; } 2>&1', 'r') as pipe:
- try:
- text = pipe.read()
- sts = pipe.close()
- except:
- process = pipe._proc
- process.kill()
- process.wait()
- raise
- if sts is None:
- sts = 0
- if text[-1:] == '\n':
- text = text[:-1]
- return sts, text
-
+ try:
+ data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT)
+ status = 0
+ except CalledProcessError as ex:
+ data = ex.output
+ status = ex.returncode
+ if data[-1:] == '\n':
+ data = data[:-1]
+ return status, data
def getoutput(cmd):
"""Return output (stdout or stderr) of executing cmd in a shell.
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 4c9f29bdb8..77f1ba3155 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -2133,13 +2133,6 @@ class Win32ProcessTestCase(BaseTestCase):
def test_terminate_dead(self):
self._kill_dead_process('terminate')
-
-# The module says:
-# "NB This only works (and is only relevant) for UNIX."
-#
-# Actually, getoutput should work on any platform with an os.popen, but
-# I'll take the comment as given, and skip this suite.
-@unittest.skipUnless(os.name == 'posix', "only relevant for UNIX")
class CommandTests(unittest.TestCase):
def test_getoutput(self):
self.assertEqual(subprocess.getoutput('echo xyzzy'), 'xyzzy')
@@ -2153,8 +2146,8 @@ class CommandTests(unittest.TestCase):
try:
dir = tempfile.mkdtemp()
name = os.path.join(dir, "foo")
-
- status, output = subprocess.getstatusoutput('cat ' + name)
+ status, output = subprocess.getstatusoutput(
+ ("type " if mswindows else "cat ") + name)
self.assertNotEqual(status, 0)
finally:
if dir is not None:
diff --git a/Misc/NEWS b/Misc/NEWS
index 26fc76cb72..c2f599bcc7 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -16,6 +16,9 @@ Library
- Issue #6157: Fixed tkinter.Text.debug(). Original patch by Guilherme Polo.
- Issue #6160: The bbox() method of tkinter.Spinbox now returns a tuple of
+
+- Issue #10197: Rework subprocess.get[status]output to use subprocess
+ functionality and thus to work on Windows. Patch by Nick Coghlan.
integers instead of a string. Based on patch by Guilherme Polo.
- Issue #19286: Directories in ``package_data`` are no longer added to