Éric Araujo <mer...@netwok.org> 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 <rep...@bugs.python.org>
<http://bugs.python.org/issue10197>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to