redirecting output of process to a file using subprocess.Popen()

rparimi at gmail.com rparimi at gmail.com
Wed Jul 9 19:32:28 EDT 2008


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



More information about the Python-list mailing list