В следующей программе я могу обработать исключение OSError, если открою /dev/full самостоятельно, но если я использую перенаправление оболочки, кажется, что io.TextIOWrapper проглатывает OSError и программа не может обнаружить сбой печати.
Как определить, что печать в sys.stdout не удалась?
#! /usr/bin/env python3.12
import sys
try:
if len(sys.argv) > 1:
out = open(sys.argv[1], 'w', buffering=1)
else:
out = sys.stdout
print("call...", file=sys.stderr)
print("data", file=out)
print("return...", file=sys.stderr)
#out.close()
except OSError as e:
print(f"error: {e}", file=sys.stderr)
sys.exit(1)
$ ./ftest.py /dev/full
call...
error: [Errno 28] No space left on device
$ ./ftest.py > /dev/full
call...
return...
Exception ignored in:
OSError: [Errno 28] No space left on device
Подробнее здесь: https://stackoverflow.com/questions/790 ... has-failed