de lo que hace sys.stdout.flush()
hacer?Uso método sys.stdout.flush()
Respuesta
salida estándar de Python se almacena temporalmente (es decir, que recoge algunos de los datos de "escrito" a la salida estándar antes de que lo escribe en el terminal). Llamar al sys.stdout.flush()
lo fuerza a "vaciar" el búfer, lo que significa que escribirá todo en el búfer del terminal, incluso si normalmente esperaría antes de hacerlo.
Aquí es una buena información acerca de (des) búfer de E/S y por qué es útil:
http://en.wikipedia.org/wiki/Data_buffer
Buffered vs unbuffered IO
¡esto no funciona en Windows! –
@Ciastopiekarz ¿Qué podemos hacer para que el búfer se vacíe en las ventanas? – helplessKirk
@Ciastopiekarz ¿Cómo te das cuenta? Si tomo el guión Python de Andrew Clark y reemplazo la línea de impresión con 'sys.stdout.write ("% d "% i)', entonces tengo que descomentar la llamada a 'sys.stdout.flush()' para obtener el búfer para visualizar mientras se ejecuta el script. –
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)
Esto está diseñado para imprimir un número cada segundo durante cinco segundos, pero si se ejecuta como es ahora (dependiendo de su almacenamiento temporal del sistema por defecto) se puede no verá ninguna salida hasta que se complete la secuencia de comandos, y luego, de una vez, 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 inmediatamente. Quite el comentario de la línea sys.stdout.flush()
para ver la diferencia.
En Python 3.x, 'print i' debe reemplazarse por print (i, end = '') porque print() en Python 3 tiene un prefijo predeterminado end = '\ n' que hace que la consola se descargue. –
¡Estaba teniendo este problema! ¡Muchas gracias por aclarar por qué esto lo resuelve! –
Según mi entendimiento, cuando haya que ejecutar la impresión de salida de las declaraciones será escrito para amortiguar. 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 búfer de código siguiente se vaciarán cuando el valor de i alcanza 5.
usted pueda comprender ejecutando el código de abajo.
chiru @ 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 @ línea: ~ $
***** ***** SALIDA
chiru @ en línea: ~ $ pitón 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 @ línea: ~ $
import sys
for x in range(10000):
print "HAPPY >> %s <<\r" % str(x),
sys.stdout.flush()
- 1. Python sys.stdout.flush() no funciona
- 2. De uso general Método FromEvent
- 3. Uso mangosta del método .select()
- 4. Uso apropiado del método estático
- 5. ¿Cuándo uso el método initWithCoder?
- 6. ¿Cómo uso el método CopyToDataTable de System.Data.DataTableExtensions?
- 7. Falta el método de uso en Rails
- 8. Método Python Definición El uso de decoradores
- 9. Objetivo C - ¿Cómo uso el método initWithCoder?
- 10. Uso método de gatillo con retraso
- 11. ¿Cómo uso el método showAlert en Android?
- 12. El uso de const en un método
- 13. ¿Cómo uso HttpWebRequest con el método GET
- 14. Uso de Guice sin un método principal
- 15. Uso método distinto __unicode__ en ModelChoiceField Django
- 16. ¿Cómo uso el método unittest setUplass()?
- 17. Caso de uso realista para el método de fábrica estático?
- 18. uso del método equals() en la interfaz del comparador?
- 19. Casos de uso para el método dict 'setdefault'
- 20. ¿cómo uso IDEA intellij para autocompletar los parámetros del método?
- 21. ¿Cómo uso el método publishResults() cuando extiendo filtros en Android?
- 22. Creación método genérico y el uso de parámetro de tipo
- 23. ¿Cuál es el uso del método printStackTrace() en Java?
- 24. ¿Cómo uso el método writeToFile en un NSMutableDictionary?
- 25. método Invoke Reflexión sobre el uso de objetos COM
- 26. Infinite 100% uso de CPU en java.io.FileInputStream.readBytes (Método nativo)
- 27. java: uso de método executeQuery (cadena) ¿error no soportado?
- 28. Uso del método dinámico C# para un objeto
- 29. C# - Uso de foreach para recorrer los argumentos del método
- 30. cuál es el uso del método recycle() en TypedArray
Ver: http://stackoverflow.com/questions/230751/how-to-flush-output-of-python-print – nitin