exc_type - sys python example
Uso del método sys.stdout.flush() (4)
¿Qué hace sys.stdout.flush()
?
Considere la siguiente secuencia de comandos simple de Python:
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 del almacenamiento en búfer predeterminado del sistema), es posible que no vea ningún resultado hasta que se complete el guión, y luego, de repente, verá 0 1 2 3 4
impreso en la pantalla.
Esto se debe a que la salida se está almacenando en el búfer, y a menos que descargue sys.stdout
después de cada print
, no verá la salida de inmediato. Elimine el comentario de la línea sys.stdout.flush()
para ver la diferencia.
La salida estándar de Python está almacenada en el búfer (lo que significa que recoge algunos de los datos "escritos" a la salida estándar antes de escribirlos en la terminal). Llamar a sys.stdout.flush()
obliga a "vaciar" el búfer, lo que significa que escribirá todo en el búfer en el terminal, incluso si normalmente esperaría antes de hacerlo.
Aquí hay buena información sobre E / S (sin) y por qué es útil:
http://en.wikipedia.org/wiki/Data_buffer
Buffer versus IO sin búfer
Según mi entendimiento, cuando alguna vez ejecutemos las declaraciones de impresión, la salida se escribirá en el búfer. Y veremos la salida en la pantalla cuando el búfer se vacíe (borre). Por defecto, el búfer se vaciará cuando el programa salga. PERO TAMBIÉN PODEMOS LIMPIAR EL BUFFER MANUALMENTE mediante el uso de la declaración "sys.stdout.flush ()" en el programa. En el código siguiente, el búfer se vaciará cuando el valor de i llegue a 5.
Puedes entender ejecutando el siguiente código.
chiru @ en línea: ~ $ 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 @ en línea: ~ $
*****SALIDA*****
chiru @ en línea: ~ $ 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 @ en línea: ~ $
import sys
for x in range(10000):
print "HAPPY >> %s <</r" % str(x),
sys.stdout.flush()