[Python-Dev] Testsuite fails on Windows if a space is in the path

"Martin v. Löwis" martin at v.loewis.de
Sat Sep 16 19:22:34 CEST 2006


The test suite currently (2.5) has two failures on Windows
if Python is installed into a directory with a space in it
(such as "Program Files"). The failing tests are test_popen
and test_cmd_line.

The test_cmd_line failure is shallow: the test fails to properly
quote sys.executable when passing it to os.popen. I propose to
fix this in Python 2.5.1; see #1559413

test_popen is more tricky. This code has always failed AFAICT,
except that the test itself is a recent addition. The test tries
to pass the following command to os.popen

"c:\Program Files\python25\python.exe" -c "import sys;print sys.version"

For some reason, os.popen invokes doesn't directly start Python as
a new process, but install invokes

cmd.exe /c "c:\Program Files\python25\python.exe" -c "import sys;print
sys.version"

Can somebody remember what the reason is to invoke cmd.exe (or COMSPEC)
in os.popen?

In any case, cmd.exe fails to execute this, claiming that c:\Program
is not a valid executable. It would run

cmd.exe /c "c:\Program Files\python25\python.exe"

just fine, so apparently, the problem is with argument that have
multiple pairs of quotes. I found, through experimentation, that it
*will* accept

cmd.exe /c ""c:\Program Files\python25\python.exe" -c "import sys;print
sys.version""

(i.e. doubling the quotes at the beginning and the end). I'm not quite
sure what algorithm cmd.exe uses for parsing, but it appears that
adding a pair of quotes works in all cases (at least those I could think
of). See # 1559298

Here are my questions:
1. Should this be fixed before the final release of Python 2.5?
2. If not, should it be fixed in Python 2.5.1? I'd say not: there
   is a potential of breaking existing applications. Applications
   might be aware of this mess, and deliberately add a pair of
   quotes already. If popen then adds yet another pair of quotes,
   cmd.exe will again fail.
3. If not, should this be fixed in 2.6 in the way I propose in
   the patch (i.e. add quotes around the command line)?
   Or can anybody propose a different fix?
4. How should we deal with different values of COMSPEC? Should
   this patch only apply for cmd.exe, or should we assume that
   other shells are quirk-compatible with cmd.exe in this
   respect (or that people stopped setting COMSPEC, anyway)?

Any comments appreciated,

Martin


More information about the Python-Dev mailing list