subprocess considered harmfull?

Uri Nix Uri.Nix at gmail.com
Mon Sep 26 08:16:14 CEST 2005


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




More information about the Python-list mailing list