Issue with subprocess Module

Tim Golden mail at
Tue Apr 7 21:17:07 CEST 2009

> Tim Golden wrote:
>> Sounds reasonable, but isn't actually true. This works fine:
>> <code>
>> import subprocess
>> open ("t.bat", "w").write ("echo hello")
>> subprocess.Popen ("t.bat")
>> </code>
>> TJG
>> </div>

Dave Angel wrote:
> The docs of Popen() state that it uses CreateProcess() on Windows, so I 
> didn't even try it.  

I only knew because I'd answered a similar question
recently and had simply tried it out!

> Thanks for informing me it works.  I see now the 
> COMSPEC manipulation in _execute_child(), but I'm still puzzled.  When I 
> step through, it skips that part because we didn't specify shell= as an 
> argument.   It still had not put the cmd.exe /c into the args variable 
> when it called CreateProcess().  So is the Python CreateProcess more 
> than a thin wrapper around Windows version?

Doesn't look like it. And using win32process.CreateProcess from
pywin32 does exactly the same. (Haven't checked their source
but I doubt they're finicking around with the parameters):

import win32process

open ("t.bat", "w").write ("echo hello")

win32process.CreateProcess (
  win32process.STARTUPINFO ()



(<PyHANDLE at 11729792 (128)>, <PyHANDLE at 11042712 (132)>, 6208, 5732)
c:\temp>echo hello



So it looks as though the MS docs are simply wrong? I haven't
tried it with ctypes or a native C program, but I can't
see that they should be any different. If I get a chance
later I'll knock something up in C.

> But what about the OP problem?  I now see it runs okay for me, both 
> stand-alone and inside Komodo.  But he's getting an exception inside 
> make_inheritable(), which is apparently being passed an invalid handle.
> Runs OK for me, in Python 2.6 running under XP, SP3.      2.6.1 
> (r261:67517, Dec  4 2008, 16:51:00) [MSC v.1500 32 bit (Intel)]

Works under python 26/25/24 and the current subversion trunk,
and on 3.1 once I'd modified the input to be a bytes string.


More information about the Python-list mailing list