Учитывая следующую программу на Python:
import sys
print("input")
while True:
pass
и эквивалент в C:
#include <stdio.h>
int main() {
printf("input\n");
while(1);
return 0;
}
Когда я передаю программу с cat
, вывод по умолчанию буферизуется (вместо буферизации строки). Как следствие, у меня нет вывода:
% python3 ./a.py | cat
(empty)
% ./a.out | cat
(empty)
Я могу использовать stdbuf
, чтобы вернуться к буферизации строк:
% stdbuf -oL ./a.out | cat
input
Но это не работает с Python:
% stdbuf -oL python3 a.py | cat
(empty)
Есть идеи, почему? Я знаю о существовании python3 -u
, но я хочу буферизацию строки, а не "без буферизации", и я хочу, чтобы эта командная строка работала и для других языков. Команда unbuffer
, кажется, тоже работает, но я хотел бы понять, почему stdbuf
здесь не работает.