diff options
author | Tim Golden <mail@timgolden.me.uk> | 2013-11-03 14:20:23 +0000 |
---|---|---|
committer | Tim Golden <mail@timgolden.me.uk> | 2013-11-03 14:20:23 +0000 |
commit | 49667f09a72a3a33e5e0598233ce5a3d971f52e9 (patch) | |
tree | c8d0df1a0bc09bafea1e257b220e0bac1e770a25 | |
parent | 0b9e815d8dfab1844d8095b916e0ccb75d7bf3da (diff) | |
parent | e004175c5694804c263f0f06e7a4e3bbc6852cc4 (diff) | |
download | cpython-git-49667f09a72a3a33e5e0598233ce5a3d971f52e9.tar.gz |
Issue #10197: merge heads
-rw-r--r-- | Lib/subprocess.py | 24 | ||||
-rw-r--r-- | Lib/test/test_subprocess.py | 11 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
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: @@ -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 |