bug in os.system?
Fredrik Lundh
fredrik at pythonware.com
Tue Oct 18 05:53:51 EDT 2005
nicksjacobson at yahoo.com wrote:
> The following code fails (pythonbugtest.exe takes one parameter, a
> string):
>
> import os
> result = os.system('"pythonbugtest.exe" "test"')
> assert(result == 0)
>
> The error message is:
>
> 'pythonbugtest.exe" "test' is not recognized as an internal or external
> command, operable program or batch file.
> Traceback (most recent call last):
> File "C:\Nick\!My Programs\Python\bugtest\python1.py", line 8, in ?
> assert(result == 0)
> AssertionError
>
> If I remove the quote marks around "pythonbugtest.exe" or "test", it
> works fine. But sometimes I need those quote marks, if e.g. there are
> spaces in filenames.
>
> I think this is a bug?
yup, but unfortunately, it's a bug at the windows level, not in Python. from what
I can tell, the problem is that cmd.exe cannot parse the command string it's given
by the C-level system() call.
possible workarounds:
1. get rid of the quotes around the command name:
result = os.system('pythonbugtest.exe "test"')
2. add an extra quote (!) before the quoted command name:
result = os.system('""pythonbugtest.exe" "test"')
3. use os.spawn or the subprocess module instead.
</F>
More information about the Python-list
mailing list