Pregunta

Tengo un código Python que estoy ejecutando en un grupo de computadoras.La salida predeterminada (stdout, de print) se pierde cuando el código falla (o se cancela, etc.).Tampoco aparece en el archivo de salida cuando lo llamo inmediatamente después de llamar a la parte correspondiente del código.

La salida de error (stderr) sin embargo, se imprime cuando el trabajo falla.Si no recuerdo mal, en c++ puedes flush secuencias para asegurarse de que la salida atrapada en un búfer en algún lugar realmente se imprima.¿Existe un análogo para Python?¿Cómo puedo asegurarme de obtener este resultado lo antes posible?


una representación esquemática de mi código

for it in somerange:
    print "Iteration", it       # This appears much later in stdout
    f = open(filename[it], 'w')
    f.write('stuff')
    f.close                     # file appears when it is closed
    otherStuff()

Después de algunas iteraciones, tendré numerosos archivos de salida (de filename), pero no hay salida en mi stdout archivo.Si la función otherStuff() fueran a causar un bloqueo (etc.), salida Voluntad aparecer en mi stderr archivo - pero aún no hay nada en mi stdout archivo.

¿Fue útil?

Solución

Bueno entonces print va a sistema.stdout el cual es un objeto de archivo, para lo cual puedes utilizar el flush() dominio.Entonces la respuesta correcta es agregar flush() llama cuando es necesario, es decir

import sys
...
for it in somerange:
    print "Iteration", it       # This appears much later in stdout
    sys.stdout.flush()
    f = open(filename[it], 'w')
    f.write('stuff')
    f.close                     # file appears when it is closed
    otherStuff()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top