SI uno realmente quisiera esos datos, sugeriría adjuntar el depurador gdb al intérprete de python, detener momentáneamente la tarea, llamar fsync(1)( stdout ), desconectarla (reanudar el proceso) y examinar el archivo de salida.
Mire /proc/$(pidof python)/fdpara ver descriptores de archivo válidos. $(pidof x)devuelve el PID del proceso llamado ' x'.
# your python script is running merrily over there.... with some PID you've determined.
#
# load gdb
gdb
#
# attach to python interpreter (use the number returned by $(pidof python))
attach 1234
#
# force a sync within the program's world (1 = stdout, which is redirected in your example)
call fsync(1)
#
# the call SHOULD have returned 0x0, sync successful. If you get 0xffffffff (-1), perhaps that wasn't stdout. 0=stdin, 1=stdout, 2=stderr
#
# remove our claws from poor python
detach
#
# we're done!
quit
He usado este método para cambiar los directorios de trabajo, ajustar la configuración sobre la marcha ... muchas cosas. Por desgracia, solo puede llamar a funciones definidas en el programa en ejecución, fsyncaunque funciona bien.
(El comando gdb ' info functions' enumerará todas las funciones disponibles. Sin embargo, tenga cuidado. Está operando EN VIVO en un proceso).
También está el comando peekfd(que se encuentra en el psmiscpaquete de Debian Jessie y otros) que le permitirá ver lo que se esconde en las memorias intermedias de un proceso. Nuevamente, /proc/$(pidof python)/fdle mostraremos descriptores de archivo válidos para dar como argumentos a peekfd.
Si no recuerda -upara python, siempre puede prefijar un comando con stdbuf(in coreutils, ya instalado) para establecer stdin / stdout / stderr en no protegido, bloqueado en línea o bloqueado como lo desee:
stdbuf -i 0 -o 0 -e 0 python myscript.py > unbuffered.output
Por supuesto, man pagesson tus amigos, ¡oye! Tal vez un alias podría ser útil aquí también.
alias python='python -u'
¡Ahora tu python siempre usa -upara todos tus esfuerzos de línea de comando!