[Kurt B. Kaiser, struggles to get an embedded-space spawn to work] 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>!
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4