Issue with subprocess Module
Tim Golden
mail at timgolden.me.uk
Tue Apr 7 15:17:07 EDT 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):
<code>
import win32process
open ("t.bat", "w").write ("echo hello")
win32process.CreateProcess (
None,
"t.bat",
None,
None,
1,
0,
None,
None,
win32process.STARTUPINFO ()
)
</code>
gives
<dump>
(<PyHANDLE at 11729792 (128)>, <PyHANDLE at 11042712 (132)>, 6208, 5732)
>>>
>>>
c:\temp>echo hello
hello
>>>
</dump>
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.
TJG
More information about the Python-list
mailing list