Éric Araujo <[email protected]> added the comment:
My idea is simply using Popen with appropriate args for stdout and stderr
instead of using a shell command with redirections:
--- Lib/subprocess.py (révision 86943)
+++ Lib/subprocess.py (copie de travail)
@@ -560,11 +560,7 @@
return ''.join(result)
-# Various tools for executing commands and looking at their output and status.
-#
-# NB This only works (and is only relevant) for UNIX.
-
-def getstatusoutput(cmd):
+def getstatusoutput(cmd, shell=True):
"""Return (status, output) of executing cmd in a shell.
Execute the string 'cmd' in a shell with os.popen() and return a 2-tuple
@@ -581,14 +577,21 @@
>>> subprocess.getstatusoutput('/bin/junk')
(256, 'sh: /bin/junk: not found')
"""
- pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
- text = pipe.read()
- sts = pipe.close()
- if sts is None: sts = 0
- if text[-1:] == '\n': text = text[:-1]
+ # Wish I could use with...
+ popen = Popen(cmd, shell=shell, stdout=PIPE, stderr=STDOUT)
+ sts = popen.communicate() #or wait() or whatever is the right thing
+ try:
+ text = process.stdout.read()
+ finally:
+ process.stdout.close()
+ if sts is None:
+ sts = 0
+ if text.endswith('\n'):
+ text = text[:-1]
return sts, text
(The new “shell” argument is icing on the cake, allowing us to later support a
list as cmd argument like Popen does.)
----------
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue10197>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com