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 -- http://mail.python.org/mailman/listinfo/python-list