J'ai souvent besoin de sortir des données soit vers un fichier, soit, si le fichier n'est pas spécifié, vers stdout. J'utilise le snippet suivant :
if target:
with open(target, 'w') as h:
h.write(content)
else:
sys.stdout.write(content)
Je voudrais le réécrire et traiter 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 sera fermé en quittant with
et je ne veux pas de ça. Je ne veux pas non plus
stdout = open(target, 'w')
...
parce que je devrais me souvenir de restaurer le stdout original.
En rapport :
- Rediriger stdout vers un fichier en Python ?
- Traitement des exceptions - article intéressant sur la gestion des exceptions en Python, par rapport au C++
Modifier
Je sais que je peux emballer target
définir une fonction ou un usage distinct gestionnaire de contexte . Je cherche une solution simple, élégante et idiomatique qui ne nécessite pas plus de 5 lignes.