Это только для меня или stdbuf бесполезен для python? Я попробовал это на моей системе:
uname -a
Linux poirot 4.9.0-11-amd64 #1 SMP Debian 4.9.189-3+deb9u2 (2019-11-11) x86_64 GNU/Linux
stdbuf --version
stdbuf (GNU coreutils) 8.26
python3 --version
Python 3.5.3
С текущим сценарием python:
import sys
print("test sdout recup")
print("test stderr recup", file=sys.stderr)
Вывод stdbuf точно такой же, как и без него.
stdbuf -o 4096 -e L python3 test2.py
test sdout recup
test stderr recup
Я также пробовал режим python без буферизации, чтобы попытаться деактивировать это поведение python, не слушая stdbuf. Не работает:
stdbuf -i 4096 -o 4096 -e L python3.7 -u test2.py
test sdout recup
test stderr recup
Где это должно быть в обратном порядке, так как stdout должен буферизироваться с большим буфером, а stderr печататься мгновенно.
Я основал некоторую публикацию о переполнении стека, где используется техника stdbuf работать на них, поэтому я немного запутался
https://superuser.com/questions/764479/force-output-buffer-flush-in-running-program
https://unix.stackexchange.com/questions/182537/write-python-stdout-to-file-immediately
Работа техники stdbuf в моей системе с этим C кодом:
#include <stdio.h>
void main(){
fprintf(stdout,"stdout 1\n");
fprintf(stderr,"stderr 2\n");
}
Выходы:
$stdbuf -o 4096 -e L ./a.out
stderr 2
stdout 1
$./a.out
stdout 1
stderr 2