[Python-checkins] r83830 - in python/branches/py3k/Lib: subprocess.py test/test_subprocess.py
tim.golden
python-checkins at python.org
Sun Aug 8 18:17:48 CEST 2010
Author: tim.golden
Date: Sun Aug 8 18:17:48 2010
New Revision: 83830
Log:
Issue #2304: Add additional quotes when using cmd shell on Windows. Original patch from Gabriel Genellina
Modified:
python/branches/py3k/Lib/subprocess.py
python/branches/py3k/Lib/test/test_subprocess.py
Modified: python/branches/py3k/Lib/subprocess.py
==============================================================================
--- python/branches/py3k/Lib/subprocess.py (original)
+++ python/branches/py3k/Lib/subprocess.py Sun Aug 8 18:17:48 2010
@@ -853,7 +853,7 @@
startupinfo.dwFlags |= _subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = _subprocess.SW_HIDE
comspec = os.environ.get("COMSPEC", "cmd.exe")
- args = comspec + " /c " + args
+ args = comspec + " /c " + '"%s"' % args
if (_subprocess.GetVersion() >= 0x80000000 or
os.path.basename(comspec).lower() == "command.com"):
# Win9x, or using command.com on NT. We need to
Modified: python/branches/py3k/Lib/test/test_subprocess.py
==============================================================================
--- python/branches/py3k/Lib/test/test_subprocess.py (original)
+++ python/branches/py3k/Lib/test/test_subprocess.py Sun Aug 8 18:17:48 2010
@@ -1015,6 +1015,7 @@
self._kill_process('terminate')
+
# The module says:
# "NB This only works (and is only relevant) for UNIX."
#
@@ -1041,6 +1042,46 @@
if dir is not None:
os.rmdir(dir)
+class CommandsWithSpaces (BaseTestCase):
+
+ def setUp(self):
+ super().setUp()
+ f, fname = mkstemp(".py", "te st")
+ self.fname = fname.lower ()
+ os.write(f, b"import sys;"
+ b"sys.stdout.write('%d %s' % (len(sys.argv), [a.lower () for a in sys.argv]))"
+ )
+ os.close(f)
+
+ def tearDown(self):
+ os.remove(self.fname)
+ super().tearDown()
+
+ def with_spaces(self, *args, **kwargs):
+ kwargs['stdout'] = subprocess.PIPE
+ p = subprocess.Popen(*args, **kwargs)
+ self.assertEqual(
+ p.stdout.read ().decode("mbcs"),
+ "2 [%r, 'ab cd']" % self.fname
+ )
+
+ def test_shell_string_with_spaces(self):
+ # call() function with string argument with spaces on Windows
+ self.with_spaces('"%s" "%s"' % (self.fname, "ab cd"), shell=1)
+
+ def test_shell_sequence_with_spaces(self):
+ # call() function with sequence argument with spaces on Windows
+ self.with_spaces([self.fname, "ab cd"], shell=1)
+
+ def test_noshell_string_with_spaces(self):
+ # call() function with string argument with spaces on Windows
+ self.with_spaces('"%s" "%s" "%s"' % (sys.executable, self.fname,
+ "ab cd"))
+
+ def test_noshell_sequence_with_spaces(self):
+ # call() function with sequence argument with spaces on Windows
+ self.with_spaces([sys.executable, self.fname, "ab cd"])
+
@unittest.skipUnless(getattr(subprocess, '_has_poll', False),
"poll system call not supported")
@@ -1093,6 +1134,7 @@
Win32ProcessTestCase,
ProcessTestCasePOSIXPurePython,
CommandTests,
+ CommandsWithSpaces,
ProcessTestCaseNoPoll,
HelperFunctionTests)
More information about the Python-checkins
mailing list