[Python-Dev] Re: FWD: Re: Problem w/ IDLE on Win2000
Guido van Rossum
guido at python.org
Fri Aug 8 21:53:08 EDT 2003
> [Kurt B. Kaiser, struggles to get an embedded-space spawn to work]
[Tim, can't belp helping]
> I think the trick is that you shouldn't quote the executable path at all.
> Under the covers, MS takes the executable name as-is, passing it as the
> lpApplicationName argument to the Win32 CreateProcess(), but squashes all
> your *arguments* into a single string, which gets passed on as the
> lpCommandLine argument to CreateProcess().
>
> In the arguments, you should avoid the cleverness of trying to quote only
> the part(s) with a space(s). Stick a double quote on each end of each
> argument, and that's it(*).
>
> So, for example, I made a copy of a wc.exe into
>
> c:\Program Files\tmp\w c.exe
>
> and then this Python works (on Win98SE(*)) to run that program on itself:
>
> """
> raw = r'C:\Program Files\tmp\w c.exe'
>
> import os
> print os.path.exists(raw)
>
> decorated = '"%s"' % raw
> os.spawnv(os.P_NOWAIT, raw, (decorated, decorated))
> """
>
> Here's the output:
>
> C:\Code\python\PCbuild>python temp2.py
> True
> 26 203 13824 C:\Program Files\tmp\w c.exe
>
> C:\Code\python\PCbuild>
>
> So I expect that IDLE is getting in trouble because it's not stuffing quotes
> around an *argument* to a program it's spawning.
>
>
> (*) There the fun begins. While os.system() spawns a command shell,
> I don't think spawnv() does. Which would be a real help here.
> Win9x use command.com by default, and Windows after that use
> cmd.exe. They have have different quoting rules, and cmd.exe
> actually has two different sets of quoting rules (triggered by
> an option to cmd.exe, and/or by a registry setting).
>
> Still, I haven't tried the program above on a Win2K (etc)
> system, and somebody should before you get optimistic. In one
> of cmd.exe's quoting nightmare modes, whether double quotes
> get stripped actually depends on the content of the quoted
> string <arghghghgh>!
Right. I'm pretty sure that the quoting rules are different on 9x/Me
on the one hand and on NT/2K/XP OTOH (though the real reason may be
the different default shell). For example, on my 98se laptop, in a
DOS shell,
cd \Program Files
says
Too any parameters - files
while this works on the XP (still -- Red Hat Linux 9.0 coming soon :-)
box at work.
--Guido van Rossum (home page: http://www.python.org/~guido/)
More information about the Python-Dev
mailing list