redirecting output of process to a file using subprocess.Popen()
skeept
skeept at gmail.com
Thu Jul 10 17:46:50 EDT 2008
On Jul 9, 7:32 pm, rpar... at gmail.com 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
More information about the Python-list
mailing list