Issue 506100: commands.getstatusoutput(): cmd.exe support (original) (raw)
##commands.getstatusoutput(): Does not support for DOS-type shells
-------------------------------------------------------------
Inside commands.py, the getstatusoutput() function is not capable of running a
DOS-type shell command. The current code assumes that the operating system
is running a Unix-type shell.
The old code is:
def getstatusoutput(cmd): """Return (status, output) of executing cmd in a shell.""" import os 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] return sts, text
I propose that we update that code to check the operating system and support
DOS-style shells (for DOS, NT, OS/2) with the following modified code:
def getstatusoutput(cmd):
"""Return (status, output) of executing cmd in a shell."""
import os
if os.name in ['nt', 'dos', 'os2'] :
# use Dos style command shell for NT, DOS and OS/2
pipe = os.popen(cmd + ' 2>&1', 'r')
else :
# use Unix style for all others
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]
return sts, text
Logged In: YES user_id=420631
The changed proposed is for DOS-type shells, not DOS itself (as far as I know pure MS-DOS or PC-DOS are not supported). But Win32 platforms are (NT, 2000, ...) and they use the same type of native command interpreter shell. With the proposed change getstatusoutput() works in those. cmd.exe is available in NT, 2000 and also in OS/2.