[Python-es] Redireccionar el stdout

Marcos Sánchez Provencio rapto en arrakis.es
Dom Mar 17 09:10:11 CET 2002


No es para ayudar, es para liarlo más.
¿Por qué no funciona esto?
####################################
import sys

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

class sysTrucada:
    def __init__(self):
        self.stdout=Output()


codigo="""
print "Hola Mundo"
print sys.stdout
"""

s=sysTrucada()

exec codigo in {'sys':s}

print ">>>>",s.stdout.text

El sáb, 16-03-2002 a las 18:18, Chema Cortés escribió:
> 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,
> -- 






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