GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué stdbuf no tiene efecto en Python?

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 .


Linux
  1. La salida de Ls tiene saltos de línea pero se muestra en una sola línea. ¿Por qué?

  2. ¿Qué sucede con la salida de un proceso que ha sido repudiado y ha perdido su terminal?

  3. ¿Por qué Signint no se propaga al proceso secundario cuando se envía a su proceso principal?

  4. Linux:¿Suid no tiene efecto en los directorios con Linux?

  5. ¿Por qué es /dev/null un archivo? ¿Por qué no se implementa su función como un programa simple?

Declaración de Python if..else

En `while Ifs=Read..`, ¿por qué Ifs no tiene efecto?

¿Por qué hay una salida de ping después de que se haya terminado?

¿Por qué Ubuntu detuvo el envío gratuito de sus CD?

¿Por qué mi initrd solo tiene un directorio, a saber, 'kernel'?

¿Por qué mi montaje de enlace está visible fuera de su espacio de nombres de montaje?