subprocess considered harmfull?

Roger Upole rupole at hotmail.com
Mon Sep 26 19:02:03 EDT 2005


"Uri Nix" <Uri.Nix at gmail.com> wrote in message news:1127715374.336617.87770 at g49g2000cwa.googlegroups.com...
> Roger Upole wrote:
>> "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 =----
>
> I gathered as much about why this happens in VS. A further question is
> why does n't os.popen fall in the same trap?
>
> Cheers,
>  Uri
>


>From a quick glance at the source, it looks like it always
creates new pipes.

         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