Souvent, j'ai besoin de sortir des données dans un fichier ou, si le fichier n'est pas spécifié, dans stdout. J'utilise l'extrait suivant:
if target:
with open(target, 'w') as h:
h.write(content)
else:
sys.stdout.write(content)
Je voudrais le réécrire et gérer les deux cibles de manière uniforme.
Dans le cas idéal, ce serait:
with open(target, 'w') as h:
h.write(content)
mais cela ne fonctionnera pas bien car sys.stdout est fermé en quittant le withbloc et je ne le veux pas. Je ne veux pas non plus
stdout = open(target, 'w')
...
parce que j'aurais besoin de me rappeler de restaurer la sortie standard d'origine.
En relation:
- Rediriger stdout vers un fichier en Python?
- Handling Exceptions - article intéressant sur la gestion des exceptions en Python, par rapport à C ++
Éditer
Je sais que je peux envelopper target, définir une fonction distincte ou utiliser le gestionnaire de contexte . Je recherche une solution de montage simple, élégante et idiomatique qui ne nécessiterait pas plus de 5 lignes