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

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