Spesso ho bisogno di inviare i dati su file o, se il file non è specificato, su stdout. Uso il seguente frammento:
if target:
with open(target, 'w') as h:
h.write(content)
else:
sys.stdout.write(content)
Vorrei riscriverlo e gestire entrambi gli obiettivi in modo uniforme.
Nel caso ideale sarebbe:
with open(target, 'w') as h:
h.write(content)
ma questo non funzionerà bene perché sys.stdout è chiuso quando si lascia il withblocco e non lo voglio. Nemmeno io lo voglio
stdout = open(target, 'w')
...
perché avrei bisogno di ricordarmi di ripristinare lo stdout originale.
Relazionato:
- Reindirizzare lo stdout a un file in Python?
- Gestione delle eccezioni : articolo interessante sulla gestione delle eccezioni in Python, rispetto a C ++
modificare
So che posso avvolgere target, definire funzioni separate o utilizzare il gestore di contesto . Cerco una soluzione semplice, elegante, idiomatica che non richieda più di 5 righe