He buscado en Google, Desbordamiento de la Pila y mis usuarios de Python de la guía, y no he encontrado una forma sencilla, viable respuesta para la pregunta.

He creado un archivo c:\goat.txt en un Windows 7 x64 máquina y estoy intentando imprimir «de prueba» para el archivo. He probado los siguientes basado en los ejemplos proporcionados en StackOverflow:

En este punto no quiero utilizar el módulo de registro ya que no entiendo de la documentación de crear un registro simple sobre la base de un binario condición. La impresión es simple pero cómo redirigir la salida no es obvia.

Un simple, claro ejemplo de que puedo entrar en mi interperter es la más útil.

También, alguna sugerencia de sitios informativos son apreciados (NO pydocs).

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
  • «no»? Lo que sucede?
  • También, ¿Qué tutorial estás usando? «buscado durante horas y horas sin resultado alguno» debería sustituirse por «hice el tutorial de horas». Has abierto algún tutorial? Si es así, ¿cuál?
InformationsquelleAutor surfdork | 2010-11-05

8 Comentarios

  1. 112

    Si estás en Python 2.5 o más temprano, abrir el archivo y, a continuación, utilizar el archivo objeto en su redirección:

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

    Si estás en Python 2.6 o 2.7, se puede escribir como una función de:

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

    Si estás en Python 3.0 o posterior, puede omitir el futuro de importación.

    Si quieres globalmente redirigir sus instrucciones de impresión, puede establecer sys.stdout:

    import sys
    sys.stdout = open("c:\goat.txt", "w")
    print ("test sys.stdout")
    • La importación de esta función de impresión hace que mis otras instrucciones de impresión de error. print «a Partir de LfD…» ^ SyntaxError: invalid syntax
    • Ese es un buen punto; sólo debe hacer la importación en el futuro de la función de impresión en un archivo donde usted está dispuesto a convertir TODOS tus instrucciones de impresión para las llamadas de función.
    • Para regresar a stdout, utilice el código: sys.stdout = sys.__stdout__
    • En realidad, en la 3.0 o posterior, puede proporcionar el archivo como una palabra clave arg: with open('myfile','w') as f: print("my example", file=f)
  2. 47

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

    import sys
    with open('c:\goat.txt', 'w') as f:
        sys.stdout = f
        print "test"
    • Luego puedes ajustar stdout vuelta al estado original con: sys.stdout = sys.__stdout__
    • Esto también funciona para la impresión de las llamadas en otros .archivos py
    • su mejor para volver a asignar sys.stdout su valor por defecto como se menciona aquí stackoverflow.com/a/7152903/1054978
  3. 16

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

    Así que imagine que usted había main.py

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

    Que usted puede hacer

    python main.py >> text.log

    y, a continuación, el texto.registro de obtener todos los resultados.

    Esto es útil si usted ya tiene un montón de instrucciones de impresión y no quieren cambiar individualmente a imprimir a un archivo específico. Sólo tienes que hacer en el nivel superior y directo a todas las impresiones a un archivo (el único inconveniente es que sólo se puede imprimir en una sola de destino).

    • Así que además de esto he añadido un «antes del lanzamiento de secuencia de comandos» en la configuración de PyCharm que copia el contenido del texto.registro de entrada/salida.registro a un archivo «concatenated_output.registro de» antes de python sobrescribe el texto antiguo.registro de entrada/salida.registro. De esta manera usted tiene un historial de trabajo de registro (el registro de paquete no funciona en mi caso). sugerencia: asegúrese de imprimir la fecha y hora en algún lugar de su salida
  4. 4

    Edificio en respuestas anteriores, creo que es un caso de uso perfecto para hacerlo (simple) contexto gerente estilo:

    import sys
    
    class StdoutRedirection:
        """Standard output redirection context manager"""
    
        def __init__(self, path):
            self._path = path
    
        def __enter__(self):
            sys.stdout = open(self._path, mode="w")
            return self
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            sys.stdout.close()
            sys.stdout = sys.__stdout__

    y luego:

    with StdoutRedirection("path/to/file"):
        print("Hello world")

    También sería muy fácil para agregar funcionalidad a StdoutRedirection de la clase (por ejemplo, un método que le permite cambiar la ruta de acceso)

  5. 3

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

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

    simple en python 3.6

    o = open('outfile','w')

    print('hello world', file=o)

    Yo estaba buscando algo como yo lo hice en Perl

    my $printname = "outfile"

    open($ph, '>', $printname)
    or die "Could not open file '$printname' $!";

    print $ph "hello world\n";

    POR FAVOR, NO MODIFIQUE ESTOS SIMPLES DE 2 LÍNEAS DE CÓDIGO
    y reemplazarlas con algo donde usted tiene que utilizar con …. abrir para cada instrucción print. Que no sería útil para mí – sólo tiene que añadir un comentario o respuesta de su propio. En mi caso, he abierto dos archivos de salida una vez para un archivo de entrada, a continuación, cierra y abre de nuevo para un segundo archivo de entrada y se transmitirán a través de la rutina de nuevo.

  7. 1
    from __future__ import print_function
    log = open("s_output.csv", "w",encoding="utf-8")
    for i in range(0,10):
       print('\nHeadline: '+l1[i]', file = log)

    Por favor, agregue encoding="utf-8" así como para evitar el error de » ‘mapcar’ codec no se puede codificar los caracteres en la posición 12-32: mapas de caracteres para «

  8. -2

    Redirigir sys.stdout a un archivo abierto de manejar y, a continuación, todos los impresos de salida va a un archivo:

    import sys
    filename  = open("outputfile",'w')
    sys.stdout = filename
    print "Anything printed will go to the output file"
    • Cuando ejecuto «sys.stdout = nombre de archivo», el programa se congela, no está seguro de lo que va mal.
    • tal vez stdout debe ser asignado para el búfer del puntero de sí mismo, en lugar de a una referencia.
    • No trate de reasignar sys.stdout si son de forma interactiva a escribir en el intérprete de python, porque ya no ves ninguna salida de la intérprete. Porque se utiliza la salida estándar (stdout). También – no vio fuera de las sucursales que están sentados. 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here