On Jul 9, 7:32 pm, [EMAIL PROTECTED] wrote: > I am trying to redirect stderr of a process to a temporary file and > then read back the contents of the file, all in the same python > script. As a simple exercise, I launched /bin/ls but this doesn't > work: > > #!/usr/bin/python > import subprocess as proc > import tempfile > name = tempfile.NamedTemporaryFile(mode='w+b') > print 'name is '+ name.name > > cmd = [] > cmd.append('/bin/ls') > cmd.append('-l') > cmd.append('/tmp') > p = proc.Popen(cmd, stdout=name, stderr=proc.STDOUT, close_fds=True) > while True: > ret = p.poll() > if (ret is not None): > output = name.readlines() > print 'out = ', output > break > > $python sub.py > name is /tmp/tmpjz4NJY > out = [] > > I tried calling flush() on the file object but this didn't help > either. Tried closing and re-opening the file, but closing the file > object results in it getting deleted. Can the above be made to work by > using tempfiles? > > thanks
your script works just fine. The problem is that you have to move to the beggining of the file to read the actual contents of the file. name.seek(0) The whole program would be: #!/usr/bin/python import subprocess as proc import tempfile name = tempfile.NamedTemporaryFile(mode='w+b') print 'name is '+ name.name cmd = [] cmd.append('/bin/ls') cmd.append('-l') cmd.append('/tmp') p = proc.Popen(cmd, stdout=name, stderr=proc.STDOUT, close_fds=True) while True: ret = p.poll() if (ret is not None): name.seek(0) output = name.readlines() print 'out = ', output break -- http://mail.python.org/mailman/listinfo/python-list