"Uri Nix" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Roger Upole wrote: >> "Fredrik Lundh" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] >> > 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 =---- -- http://mail.python.org/mailman/listinfo/python-list