Oft muss ich Daten entweder in eine Datei oder, wenn keine Datei angegeben ist, in stdout ausgeben. Ich benutze das folgende Snippet:
if target:
with open(target, 'w') as h:
h.write(content)
else:
sys.stdout.write(content)
Ich möchte es umschreiben und beide Ziele einheitlich behandeln.
Im Idealfall wäre es:
with open(target, 'w') as h:
h.write(content)
Dies funktioniert jedoch nicht gut, da sys.stdout beim Verlassen des withBlocks geschlossen wird und ich das nicht möchte. Ich will auch nicht
stdout = open(target, 'w')
...
weil ich daran denken müsste, das ursprüngliche stdout wiederherzustellen.
Verbunden:
- Stdout in eine Datei in Python umleiten?
- Behandlung von Ausnahmen - interessanter Artikel über die Behandlung von Ausnahmen in Python im Vergleich zu C ++
Bearbeiten
Ich weiß, dass ich einschließen target, separate Funktionen definieren oder den Kontextmanager verwenden kann . Ich suche eine einfache, elegante, idiomatische Lösung, die nicht mehr als 5 Zeilen benötigt