2012-10-06 26 views
6

Se supone que el siguiente código imprime del 1 al 10 con intervalos de 1 segundo, sin embargo, está esperando 10 segundos antes de imprimir realmente algo y luego lo imprime todo En seguida. ¿Cómo puedo desactivar la salida?Python sys.stdout.flush() no funciona

import sys 
import time 
for count in range(10) : 
    sys.stdout.write(str(count)) 
    sys.stdout.flush() 
    time.sleep(1) 

Respuesta

0

Python 2.7, 3.2 y 3.3 no permiten todos los argumentos de palabra clave en su llamada de escritura. ¿Es ese el código correcto? La función de impresión, por supuesto, permite la palabra clave final y no debe confundirse con la escritura. Escribir no agrega un carácter de nueva línea.

Al eliminar el argumento y la prueba de la palabra clave 'final' se muestra que el código funciona bien.

+1

Gracias por la respuesta rápida ... Eso fue un error ... incluso sin el final = "" el código todavía se detiene antes de imprimir todo de una vez – user1724351

+0

Soy completamente incapaz de reproducir el problema. ¿Puedes limitarlo a una versión específica de Python probando otros? ¿Qué sistema operativo? – whardier

+0

Mac OSX con python 3.2.3. Simplemente no deshabilita – user1724351

1

encontrado el problema

import sys 
import time 
for count in range(10) : 
    sys.stdout.write("\b%s" % count) 
    sys.stdout.flush() 
    time.sleep(.1) 

No sé por qué Python es raro como este, pero al parecer aceptaron esta. Tu código debería haber funcionado bien, pero supongo que Python simplemente no te caía bien.

+1

Uso python 3.3 por cierto, así que podría ser diferente en otras versiones. Hizo más investigaciones y descubrí que el argumento en la impresión "end =" \ r "" borrará el búfer para que no tenga que importar sys y si coloca lo que haya impreso reemplazará lo que acaba de imprimir. Esto le da a la salida un aspecto realmente genial – Alexander

Cuestiones relacionadas