469,932 Members | 2,765 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,932 developers. It's quick & easy.

redirection of standard output of a Python command to a Python variable

TP
Hi everybody,

I try to find a quick way to redirect the standard output of a Python
command (for example: print "message") to a python variable "foobar".
Ok, in this simple example, I could do foobar = "message", but in
fact 'print "message"' could be replaced by any Python function writing on
standard output.
I have googled on this subject.
To redirect to a variable, I could use a temporary file:

import sys
saveout = sys.stdout
fsock = open('out.log', 'w')
sys.stdout = fsock
print 'message'
sys.stdout = saveout
fsock.close()
fsock = open('out.log', 'r')
foobar = fsock.read()
fsock.close()
print "foobar= ", foobar

To redirect a system standard output directly to a variable (without
temporary file), I could do:

import os
f = os.popen("ls")
print f.read()
f.close()

But, how can I get the standard output of a Python command (print "message")
directly into a variable?

Thanks

Julien

--
python -c "print ''.join([chr(154 - ord(c)) for c in '*9(9&(18%.9&1+,\'Z
(55l4('])"

"When a distinguished but elderly scientist states that something is
possible, he is almost certainly right. When he states that something is
impossible, he is very probably wrong." (first law of AC Clarke)
Oct 27 '08 #1
1 8132
En Mon, 27 Oct 2008 16:03:45 -0200, TP <Tr**********@paralleles.invalid>
escribió:
Hi everybody,

I try to find a quick way to redirect the standard output of a Python
command (for example: print "message") to a python variable "foobar".
Ok, in this simple example, I could do foobar = "message", but in
fact 'print "message"' could be replaced by any Python function writing
on
standard output.
I have googled on this subject.
To redirect to a variable, I could use a temporary file:

import sys
saveout = sys.stdout
fsock = open('out.log', 'w')
sys.stdout = fsock
print 'message'
sys.stdout = saveout
fsock.close()
fsock = open('out.log', 'r')
foobar = fsock.read()
fsock.close()
print "foobar= ", foobar
You are close - but instead of using a real file, look at the StringIO
module [1]

import sys
from cStringIO import StringIO

old_stdout = sys.stdout
sys.stdout = stdout = StringIO()
print 'message'
sys.stdout = old_stdout
foobar = stdout.getvalue()
print "foobar= ", foobar

(In case you start playing with this and make a mistake, you can restore
the original stdout from sys.__stdout__)

[1] http://docs.python.org/library/stringio.html

--
Gabriel Genellina

Oct 27 '08 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

8 posts views Thread by Marko Faldix | last post: by
14 posts views Thread by jas | last post: by
4 posts views Thread by Edwin G. Castro | last post: by
2 posts views Thread by Nadav | last post: by
13 posts views Thread by souissipro | last post: by
4 posts views Thread by Phil | last post: by
3 posts views Thread by sab | last post: by
19 posts views Thread by fx5900 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.