On May 11, 8:46 pm, Greg Ercolano <[EMAIL PROTECTED]> wrote: > When I use os.popen(cmd,'w'), I find that under windows, the stdout > of the child process disappears, instead of appearing in the DOS > window > the script is invoked from. eg: > > C:\> type foo.py > import os > import sys > file = os.popen("nslookup", 'w') > file.write("google.com\n") > file.close() > > C:\> python foo.py > <-- nothing is printed > C:\> > > This just seems wrong. The following DOS equivalent works fine: > > C:\> echo google.com | nslookup > Default Server: dns.erco.x > Address: 192.168.1.14 > [..expected output..] > > When I run the same python program on a unix box, the output > from 'nslookup' appears in the terminal, as I'd expect. > > Shouldn't popen() be consistent in its handling of the child's > stdout and stderr across platforms? > > Maybe I'm missing something, being somewhat new to python, but > an old hand at unix and win32 and functions like popen(). Didn't > see anything in the docs for popen(), and I googled around quite > a bit on the web and groups for eg. 'python windows popen stdout lost' > and found nothing useful. > > FWIW, I'm using the windows version of python 2.5 from activestate.
Glad to see you're finally coming into the light Greg! I've used Rush in a few different studios over the past couple of years. We even had sushi once. :) I'm no expert like you, but I think I can point you in the right direction. You need os.popen2 which returns a tuple of file-like objects. The first pointing to stdin, and the second pointing to stdout. Write to stdin, and read from stdout. import os import sys stdin, stdout = os.popen2("nslookup") stdin.write("google.com\n") stdin.close() print stdout.read() stdout.close() I don't use windows much, but I believe the os.popen functionality is being replaced by subprocess.Popen: from subprocess import * import sys p = Popen("nslookup", shell=True, bufsize=1024, stdin=PIPE, stdout=PIPE, close_fds=True) p.stdin.write("google.com\n") p.stdin.close() print p.stdout.read() p.stdout.close() I found these: http://pydoc.org/2.4.1/subprocess.html http://docs.python.org/lib/module-subprocess.html ~Sean DiZazzo Curious George -- http://mail.python.org/mailman/listinfo/python-list