Как узнать, что печать на sys.stdout в Python не удалась?Python

Программы на Python
Ответить
Anonymous
 Как узнать, что печать на sys.stdout в Python не удалась?

Сообщение Anonymous »

В следующей программе я могу обработать исключение 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»