Как правильно обрабатывать как `with open(...)`, так и `sys.stdout`?Python

Программы на Python
Ответить
Anonymous
 Как правильно обрабатывать как `with open(...)`, так и `sys.stdout`?

Сообщение Anonymous »

Часто мне нужно вывести данные либо в файл, либо, если файл не указан, на стандартный вывод. Я использую следующий фрагмент:

Код: Выделить всё

if target:
with open(target, 'w') as h:
h.write(content)
else:
sys.stdout.write(content)
Я хотел бы переписать его и обрабатывать обе цели одинаково.

В идеальном случае это было бы так:< /p>

Код: Выделить всё

with open(target, 'w') as h:
h.write(content)
но это не сработает, потому что sys.stdout закрывается при выходе с блоком , а мне этого не нужно. Я тоже не хочу

Код: Выделить всё

stdout = open(target, 'w')
...
потому что мне нужно будет не забыть восстановить исходный стандартный вывод.

Связано:
  • Перенаправить стандартный вывод в файл в Python?
  • Обработка исключений — интересная статья об обработке исключений в Python по сравнению с C++
Редактировать

Я знаю, что могу обернуть цель, определить отдельную функцию или использовать диспетчер контекста. Я ищу простое, элегантное и идиоматическое решение, которое не потребует более 5 строк

Подробнее здесь: https://stackoverflow.com/questions/176 ... out-nicely
Ответить

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

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

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

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

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