Redireccionar el stdout

Chema Cortés chemacortes en wanadoo.es
Sab Mar 16 18:18:08 CET 2002


Hola a todos:

Tengo código python en una cadena de texto y quiero capturar la salida de la 
ejecución. Con el código en fichero existen funciones que te dan la salida 
para que la puedas procesar, pero no he encontrado una similar para cuando 
tienes el código en una cadena.

Sólo se me ocurre utilizar una clase para sustituir el sys.stdout durante la 
ejecución de la cadena:

import sys

class Output:
  def __init__(self):
    self.text=""
		
  def write(self,str):
    self.text+=str

glob={}
codigo="""
print "Hola Mundo"
"""

s=Output()
save_stdout=sys.stdout
sys.stdout=s

exec(codigo,glob)

sys.stdout=save_stdout

print s.text


Me parece que me estoy complicando demasiado, ¿existe alguna otra forma más 
sencilla o voy por el camino correcto?


Saludos,
-- 
Chema Cortes (chemacortes en wanadoo.es) | LinuxUser#142755 - SuSE Linux 7.3
  ZARALINUX  http://www.zaralinux.org | "La ignorancia se apodera de quien
    PYTANDO  http://pytando.sf.net    |     se contenta con lo que sabe"


Más información sobre la lista de distribución Python-es