Por defecto, print()
de Python función dirige su salida a sys.stdout
, cuya documentación especifica esto:
Cuando es interactivo, stdout
y stderr
las secuencias tienen un búfer de línea. De lo contrario, tienen un búfer de bloque como los archivos de texto regulares. Puede anular este valor con el -u
opción de línea de comandos.
Tenga en cuenta que esos documentos no dejan espacio para las influencias ambientales generales, como la del stdbuf
comando, en el modo de almacenamiento en búfer de sys.stdout
:no tiene búfer si el -u
se usó la opción (o, de manera equivalente, si la variable de entorno PYTHONUNBUFFERED
se configuró), de lo contrario, con búfer de línea si es interactivo y con búfer de bloque si no es interactivo.
Los programas pueden controlar su propio almacenamiento en búfer, como los documentos de stdbuf
reconocer:
NOTA:Si COMMAND ajusta el almacenamiento en búfer de sus flujos estándar ('tee' lo hace, por ejemplo), entonces eso anulará la configuración correspondiente modificada por 'stdbuf'. Además, algunos filtros (como 'dd' y 'cat', etc.) no usan transmisiones para E/S y, por lo tanto, no se ven afectados por la configuración de 'stdbuf'.
Dado que Python especifica explícitamente los detalles del almacenamiento en búfer, es razonable esperar que, de hecho, administre afirmativamente su almacenamiento en búfer, lo que descarta cualquier efecto de stdbuf
.