Я хочу восстановить контроль над конвейером stdout после разрыва трубы.
Рассмотрим текущий код:
import signal
import sys
def sigpipe_handler(a, b):
print("tillhere", file=sys.stderr)
exit()
signal.signal(signal.SIGPIPE, sigpipe_handler)
while True:
print("hy")
когда я запускаю сценарий stdout конвейера:
$ python3 testsigpipe.py | head
hy
hy
hy
hy
hy
hy
hy
hy
hy
hy
tillhere
$
все работает нормально, потому что я печатаю в sys.stderr, но когда я печатаю в sys.stdout (или sys .__ stdout __)
print("tillhere", file=sys.stdout)
строка "tillere" теряется:
$ python3 testsigpipe.py | head
hy
hy
hy
hy
hy
hy
hy
hy
hy
hy
$
Если я заставлю грипп sh
print("tillhere", file=sys.__stdout__, flush=True)
, будет хуже:
$ python3 testsigpipe.py | head
hy
hy
hy
hy
hy
hy
hy
hy
hy
hy
Error in sys.excepthook:
Error in sys.excepthook:
Original exception was:
Original exception was:
$
Итак, как я могу снова перенаправить стандартный вывод на экран?