Часто мені потрібно виводити дані або у файл, або, якщо файл не вказаний, у stdout. Я використовую такий фрагмент:
if target:
with open(target, 'w') as h:
h.write(content)
else:
sys.stdout.write(content)
Я хотів би переписати його і однаково обробляти обидві цілі.
В ідеальному випадку це буде:
with open(target, 'w') as h:
h.write(content)
але це не буде працювати добре, тому що sys.stdout закривається при виході з withблоку, і я цього не хочу. Я ні хочу
stdout = open(target, 'w')
...
тому що мені потрібно було б пам'ятати, щоб відновити оригінальний stdout.
Пов’язані:
- Перенаправити stdout на файл у Python?
- Обробка винятків - цікава стаття про обробку винятків у Python порівняно з C ++
Редагувати
Я знаю, що можу обернути target, визначити окрему функцію або використовувати менеджер контексту . Я шукаю просте, елегантне, ідіоматичне рішення, що не вимагає більше 5 рядків