Вопрос: Есть ли способ использовать flush=True
для функции print()
без получения BrokenPipeError
?
У меня есть script pipe.py
:
for i in range(4000):
print(i)
Я вызываю это так из командной строки Unix:
python3 pipe.py | head -n3000
И он возвращает:
0
1
2
Так делает это script:
import sys
for i in range(4000):
print(i)
sys.stdout.flush()
Однако, когда я запускаю этот script и подключаю его к head -n3000
:
for i in range(4000):
print(i, flush=True)
Затем я получаю эту ошибку:
print(i, flush=True)
BrokenPipeError: [Errno 32] Broken pipe
Exception BrokenPipeError: BrokenPipeError(32, 'Broken pipe') in <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> ignored
Я также пробовал решение ниже, но я все еще получаю BrokenPipeError
:
import sys
for i in range(4000):
try:
print(i, flush=True)
except BrokenPipeError:
sys.exit()