Uso del método sys.stdout.flush ()

¿Qué hace sys.stdout.flush() ?

Related of "Uso del método sys.stdout.flush ()"

La salida estándar de Python está almacenada en búfer (lo que significa que recostack algunos de los datos “escritos” en la salida estándar antes de escribirlos en el terminal). Llamar a sys.stdout.flush() obliga a “vaciar” el búfer, lo que significa que escribirá todo en el búfer al terminal, incluso si normalmente esperaría antes de hacerlo.

Aquí hay una buena información sobre (des) búfer de E / S y por qué es útil:
http://en.wikipedia.org/wiki/Data_buffer
Buffered vs IO sin buffer

Considere la siguiente secuencia de comandos de Python simple:

 import time import sys for i in range(5): print(i), #sys.stdout.flush() time.sleep(1) 

Está diseñado para imprimir un número cada segundo durante cinco segundos, pero si lo ejecuta tal como está ahora (dependiendo de su sistema de almacenamiento en búfer predeterminado) es posible que no vea ninguna salida hasta que se complete la secuencia de comandos, y luego todos a la vez verán 0 1 2 3 4 impreso en la pantalla.

Esto se debe a que la salida se está almacenando en búfer y, a menos que descargue sys.stdout después de cada print , no verá la salida inmediatamente. Elimine el comentario de la línea sys.stdout.flush() para ver la diferencia.

Según mi entendimiento, cuando sea que ejecutemos las instrucciones de impresión, la salida se escribirá en el búfer. Y veremos la salida en la pantalla cuando se vacíe (borre) el búfer. Por defecto se vaciará el búfer cuando salga el progtwig. PERO TAMBIÉN PODEMOS DESCARGAR EL BUFFER MANUALMENTE usando la statement “sys.stdout.flush ()” en el progtwig. En el código siguiente se borrará el búfer cuando el valor de i scope 5.

Se puede entender ejecutando el siguiente código.

chiru @ online: ~ $ cat flush.py

 import time import sys for i in range(10): print i if i == 5: print "Flushing buffer" sys.stdout.flush() time.sleep(1) for i in range(10): print i, if i == 5: print "Flushing buffer" sys.stdout.flush() 

chiru @ online: ~ $

*****SALIDA*****

chiru @ online: ~ $ python flush.py

 0 1 2 3 4 5 Flushing buffer 6 7 8 9 0 1 2 3 4 5 Flushing buffer 6 7 8 9 

chiru @ online: ~ $

Según mi entendimiento, sys.stdout.flush () elimina todos los datos que se han almacenado en búfer hasta ese momento en un objeto de archivo. Mientras se usa la salida estándar, los datos se almacenan en la memoria intermedia (por un tiempo o hasta que se llena la memoria) antes de que se escriba en el terminal. Usar flush () obliga a vaciar el búfer y escribir en el terminal incluso antes de que el búfer tenga espacio vacío.

 import sys for x in range(10000): print "HAPPY >> %s <<\r" % str(x), sys.stdout.flush()