Если кому-то действительно нужны эти данные, я бы предложил подключить отладчик gdb к интерпретатору python, на мгновение остановить задачу, вызвать fsync(1) (stdout), отсоединиться от нее (возобновить процесс) и перейти к просмотру выходного файла.
Посмотрите в /proc/$(pidof python)/fd чтобы увидеть допустимые файловые дескрипторы. $(pidof x) возвращает PID процесса с именем ' 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
Я использовал этот метод, чтобы изменить рабочий каталог, настроить параметры на лету ... многие вещи.  Увы, вы можете вызывать только те функции, которые определены в работающей программе, однако fsync работает хорошо.
(Команда gdb ' info functions ' выведет список всех доступных функций.  Будьте осторожны, хотя.  Вы работаете в режиме реального времени .)
Существует также команда peekfd (находится в пакете psmisc в Debian Jessie и других), которая позволит вам увидеть, что скрывается в буферах процесса.   Опять же, /proc/$(pidof python)/fd покажет вам допустимые файловые дескрипторы, которые нужно передать в качестве аргументов peekfd.
Если вы не помните -u для python, вы всегда можете поставить перед командой команду stdbuf (в уже установленном coreutils ), чтобы установить для stdin/stdout/stderr значение unbuffered, строку с буферизацией или блок с буферизацией по желанию:
stdbuf -i 0 -o 0 -e 0 python myscript.py > unbuffered.output
Конечно, man pages - твои друзья, эй! возможно, псевдоним может быть полезным и здесь.
alias python='python -u'
Теперь ваш питон всегда использует -u для всех ваших попыток командной строки!