Często muszę wyprowadzać dane do pliku lub, jeśli plik nie jest określony, do standardowego wyjścia. Używam następującego fragmentu:
if target:
with open(target, 'w') as h:
h.write(content)
else:
sys.stdout.write(content)
Chciałbym go przepisać i jednolicie obsługiwać oba cele.
W idealnym przypadku byłoby to:
with open(target, 'w') as h:
h.write(content)
ale to nie zadziała dobrze, ponieważ sys.stdout jest zamykany przy opuszczaniu withbloku, a ja tego nie chcę. Ja też nie chcę
stdout = open(target, 'w')
...
ponieważ musiałbym pamiętać o przywróceniu oryginalnego standardowego wyjścia.
Związane z:
- Przekierować standardowe wyjście do pliku w Pythonie?
- Handling Exceptions - ciekawy artykuł o obsłudze wyjątków w Pythonie w porównaniu do C ++
Edytować
Wiem, że potrafię zawijać target, definiować oddzielną funkcję lub używać menedżera kontekstu . Szukam prostego, eleganckiego, idiomatycznego rozwiązania, które nie wymagałoby więcej niż 5 linek