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

Discussion in 'Python' started by TP, Oct 27, 2008.

  1. TP

    TP Guest

    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)
     
    TP, Oct 27, 2008
    #1
    1. Advertising

  2. Re: redirection of standard output of a Python command to a Pythonvariable

    En Mon, 27 Oct 2008 16:03:45 -0200, TP <>
    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
     
    Gabriel Genellina, Oct 27, 2008
    #2
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mohit Mehral
    Replies:
    10
    Views:
    1,217
    Alex Hunsley
    Mar 25, 2006
  2. Grzegorz
    Replies:
    2
    Views:
    763
    Grzegorz
    Jun 15, 2005
  3. fatalserpent

    Help with python output redirection

    fatalserpent, Apr 15, 2006, in forum: Python
    Replies:
    7
    Views:
    447
    Steven D'Aprano
    Apr 16, 2006
  4. Venks
    Replies:
    5
    Views:
    268
    Ken Bloom
    Dec 6, 2007
  5. Vincent Lambert
    Replies:
    0
    Views:
    105
    Vincent Lambert
    Feb 25, 2009
Loading...

Share This Page