Spaces in path name

Tim Golden mail at timgolden.me.uk
Sun Mar 16 12:22:11 EDT 2008


joep wrote:
> 
> Tim Golden wrote:
>> Tim Golden wrote:
>>> What I haven't investigated yet is whether the additional flags
>>> your example is passing (shell=True etc.) cause the main Popen
>>> mechanism to take a different path.
>> Sure enough, passing shell=True -- which is probably quite
>> a rare requirement -- causes the code to change the call
>> from "a.exe b.doc" to '%COMSPEC% /c "a.exe" "b.doc"'.
>> The quoting rules (from cmd /?) are slightly involved but
>> I can't see at first why this shouldn't work. However it
>> clearly doesn't so I'll try to put together either a patch
>> to the subprocess code or to the docs warning of the behaviour.
>>
>> I think that, in general, you need to pass shell=True far less
>> often that you might imagine. (Possibly only for internal
>> commands like dir, copy etc.).
>>
>> TJG
> 
> Thanks, I didn't know it is possible to drop the shell=True. The
> explanation of the subprocess model are not very clear to me and the
> examples are quite incomplete. I got it to work by trial and error and
> looking at the usage in different packages.
> 
> Dropping shell=True works well for my case, no error messages and it
> still captures the standard output:
> 
> p = subprocess.Popen([
>         r"C:\Program Files\WinRAR\Rar.exe","v",
>         r"C:\temp\Copy of papers.rar"], stdout=subprocess.PIPE)
> 
> I am still looking at different versions, and the cases when it works
> and when it doesn't are still confusing.

Well I've got a patch ready to go (which basically just
wraps a shell=True command line with an *extra* pair of
double-quotes, the same as you do for an os.system call).
I'll try to put some time into the subprocess docs as well,
at least as far as a Win32-how-do-I on my own site if not
an update to the official docs.

TJG



More information about the Python-list mailing list