2010-11-05 7 views
40

He buscado con Google, Stack over flow y mi guía de usuarios de Python y no he encontrado una respuesta simple y viable para la pregunta, "Cómo redirecciono una impresión a un archivo .txt"Python Cómo redirigir simplemente salida de impresión a un archivo TXT con una nueva línea creada para cada redirección

Creé un archivo en c: llamado goat.txt en una máquina W7x64 y estoy intentando imprimir "prueba" en el archivo.

Y he intentado los siguientes ejemplos basados ​​en upons proporcionados en StackOverflow. En este momento no quiero utilizar el módulo de registro porque no entiendo de la documentación de crear un registro simple basado en una condición binaria. La impresión es simple, sin embargo, redirigir los resultados no es evidente. He buscado durante horas sin resultado.

Un simple ejemplo claro que puedo ingresar en mi interperter es el más útil.

También se agradece cualquier sugerencia de sitios informativos (NO pydocs, que es como yo sacando a un kook en la línea de Puerto Escondido y respondiendo "mira la ola" cuando se le pregunta "cuándo remar").

#import sys 
#print('test', file=open('C:\\goat.txt', 'w')) fails 
#print(arg, file=open('fname', 'w')) above based upon this 
#print>>destination, arg 

#print>> C:\\goat.txt, "test" Fails based upon the above 
+3

¿Por qué todas las líneas de comentarios? ¿Por qué todos comienzan con "#"? –

+0

"falla"? ¿Lo que pasa? –

+2

Además, ¿qué tutorial estás usando? "buscado durante horas sin resultado" debe reemplazarse por "hizo el tutorial durante horas". ¿Has abierto un tutorial? ¿Si es así, Cuál? –

Respuesta

89

Si estás en Python 2.5 o anterior, abra el archivo y luego usar el objeto de archivo en su redirección:

log = open("c:\\goat.txt", "w") 
print >>log, "test" 

Si estás en Python 2.6 o 2.7, puede utilizar imprimir como una función:

from __future__ import print_function 
log = open("c:\\goat.txt", "w") 
print("test", file = log) 

Si está en Python 3.0 o posterior, puede omitir la futura importación.

Si desea globalmente redirigir sus declaraciones de impresión, se puede establecer sys.stdout:

import sys 
sys.stdout = open("c:\\goat.txt", "w") 
print ("test sys.stdout") 
+1

La importación de esta función de impresión hace que mi error de otras declaraciones de impresión salga. print "Starting LfD ..." ^ SyntaxError: sintaxis no válida – BenB

+3

@BenBlumer: Es un buen punto; solo debe importar en el futuro la función de impresión en un archivo en el que esté dispuesto a convertir TODAS sus instrucciones de impresión en llamadas de función. –

+4

Para reiniciar a stdout, use el código: 'sys.stdout = sys .__ stdout__' –

37

para redirigir la salida de todos los impresiones, usted puede hacer esto:

import sys 
with open('c:\\goat.txt', 'w') as f: 
    sys.stdout = f 
    print "test" 
+20

Después, puede configurar set stdout nuevamente en su estado original con:' sys.stdout = sys .__ stdout__' – user673592

+0

Esto también funciona para llamadas impresas en otros archivos .py – Matthias

+1

es mejor volver a asignar 'sys.stdout' su valor predeterminado como se menciona aquí http://stackoverflow.com/a/7152903/1054978 – Mourya

-1

redirección sys.stdout a un identificador de archivo abierto y luego toda la salida impresa va a un archivo:

import sys 
filename = open("outputfile",'w') 
sys.stdout = filename 
print "Anything printed will go to the output file" 
+2

Cuando ejecuto" sys.stdout = nombre de archivo ", el programa se congela, no estoy seguro de lo que es yendo mal. –

+0

Quizás stdout debe asignarse al puntero del buffer en lugar de a una referencia. – dopatraman

+0

No intente reasignar sys.stdout si está escribiendo de manera interactiva en el intérprete de Python, porque ya no verá ningún resultado del intérprete. Porque usa stdout. Además, no corte las ramas sobre las que esté sentado. :-) – BobDoolittle

12

Una forma un poco más hackier (que es diferente de las respuestas anteriores, que son todas válidas) sería simplemente dirigir la salida en un archivo a través de la consola.

Así que imaginen que tenía main.py

if True: 
    print "hello world" 
else: 
    print "goodbye world" 

Usted puede hacer

python main.py >> text.log 

y luego text.log obtendrá toda la producción.

Esto es útil si ya tiene un montón de instrucciones de impresión y no desea cambiarlas individualmente para imprimir en un archivo específico. Solo hazlo en el nivel superior y dirige todas las impresiones a un archivo (el único inconveniente es que solo puedes imprimir en un único destino).

0

Usinge el argumento file en la función print, puede tener diferentes archivos por impresión:

print('Redirect output to file', file=open('/tmp/example.log', 'w')) 
Cuestiones relacionadas