Восстановите контроль над стандартным выводом в конвейерном процессе python - PullRequest
0 голосов
/ 08 мая 2020

Я хочу восстановить контроль над конвейером 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:
$

Итак, как я могу снова перенаправить стандартный вывод на экран?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...