Cómo redirigir la escritura de la salida estándar por defecto (consola) en Python a un archivo

La mayoría de los resultados que en Python imprimimos a través de la consola pueden ser redireccionados facilmente a un archivo en memoria o en disco o a un objeto de visualización de PyQt4; como por ejemplo una QTextBrowser. No obstante, existen algunos pocos comandos que, por defecto, no lo hacen y hay que definir la salida estándar (stdout). Uno de esos comandos es el ‘help’ el cual nos permite tener información más detallada de las clases y métodos de clase que la que ofrece el comando ‘dir’.

Por tanto, si se quiere imprimir directamente, por ejemplo, el resultado de un ‘help(QgsVectorLayer.geometryType)’ a un archivo no será posible. Primero hay que redireccionar la salida estándar a dicho archivo y luego restituirla nuevamente a la cónsola si se quiere seguir imprimiendo normalmente a través de ella.

El código siguiente realiza ese trabajo a través de un archivo temporal. La última línea lo borra pero se ha dejado comentada para abrirlo al final y corroborar que tiene lo mismo que se imprime a través de la Python Console.

import sys, os
import tempfile as tmpf

#save a reference to the Python Console of QGIS before reassignment
oldstdout = sys.stdout

file = tmpf.NamedTemporaryFile(delete=False)

file_name = file.name

print file_name

#open an temporary file in disc to reassign the standard output
sys.stdout = file

#writing to the temporary file
help(QgsVectorLayer.geometryType)

#force the flush to the open file
sys.stdout.flush()

file.close()

#reassign the standard output to the Python Console
sys.stdout = oldstdout

#opening temporary file
my_file = open(file_name, 'r')

#reading temporary file
data = my_file.read()

print data

#erasing temporary file
#os.unlink(file.name)

Después de ejecutado en la Python Console, el contenido del archivo temporal ‘/tmp/tmpFo36e_’ se visualiza en la imagen a continuación:

temp1

Se corrobora que su contenido es el mismo que el que se imprime en la Python Consola después de restituir a ésta la salida estándar.

temp2

Anuncios
Esta entrada fue publicada en Código Python. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s