subprocess considered harmfull?

Roger Upole rupole at hotmail.com
Mon Sep 26 02:40:20 CEST 2005


"Fredrik Lundh" <fredrik at pythonware.com> wrote in message news:mailman.928.1127678532.509.python-list at python.org...
> Steven Bethard wrote:
>
>> >  Using the following snippet:
>> >   p =
>> > subprocess.Popen(nmake,stderr=subprocess.PIPE,stdout=subprocess.PIPE, \
>> >                        universal_newlines=True, bufsize=1)
>> >   os.sys.stdout.writelines(p.stdout)
>> >   os.sys.stdout.writelines(p.stderr)
>> >  Works fine on the command line, but fails when called from within
>> > Visual Studio, with the following error:
>> >   File "C:\Python24\lib\subprocess.py", line 549, in __init__
>> >     (p2cread, p2cwrite,
>> >   File "C:\Python24\lib\subprocess.py", line 609, in _get_handles
>> >     p2cread = self._make_inheritable(p2cread)
>> >   File "C:\Python24\lib\subprocess.py", line 650, in _make_inheritable
>> >     DUPLICATE_SAME_ACCESS)
>> > TypeError: an integer is required
>>
>> This looks like these known bugs:
>>      http://python.org/sf/1124861
>>      http://python.org/sf/1126208
>>
>> Try setting stderr to subprocess.PIPE.  I think that was what worked for
>> me.  (You might also try setting shell=True.  That's what I currently
>> have in my code that didn't work before.)
>
> if someone wants to investigate, is seeing this problem, and have the win32
> extensions on their machine, try changing this line in subprocess.py:
>
>    if 0: # <-- change this to use pywin32 instead of the _subprocess driver
>
> to:
>
>    if 1: # <-- change this to use _subprocess instead of the pywin32 driver
>
> and see if it either fixes the problem (not very likely) or gives you a better
> error message (very likely).
>
> </F>
>

The error msg is only slightly better:

error: (6, 'DuplicateHandle', 'The handle is invalid.')

Basically, gui apps like VS don't have a console, so
GetStdHandle returns 0.   _subprocess.GetStdHandle
returns None if the handle is 0, which gives the original
error.  Pywin32 just returns the 0, so the process gets
one step further but still hits the above error.

Subprocess.py should probably check the
result of GetStdHandle for None (or 0)
and throw a readable error that says something like
"No standard handle available, you must specify one"

         Roger




----== Posted via Newsfeeds.Com - Unlimited-Uncensored-Secure Usenet News==----
http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups
----= East and West-Coast Server Farms - Total Privacy via Encryption =----



More information about the Python-list mailing list