stdbuf: нет эффекта для python3 процесса? - PullRequest
0 голосов
/ 16 апреля 2020

Это только для меня или 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
...