Freqüentemente, preciso enviar dados para o arquivo ou, se o arquivo não for especificado, para o stdout. Eu uso o seguinte snippet:
if target:
with open(target, 'w') as h:
h.write(content)
else:
sys.stdout.write(content)
Gostaria de reescrevê-lo e lidar com os dois alvos de maneira uniforme.
No caso ideal, seria:
with open(target, 'w') as h:
h.write(content)
mas isso não funcionará bem porque sys.stdout é fechado ao sair do withbloco e eu não quero isso. Eu nem quero
stdout = open(target, 'w')
...
porque eu precisaria me lembrar de restaurar o stdout original.
Relacionado:
- Redirecionar stdout para um arquivo em Python?
- Manipulando exceções - artigo interessante sobre como lidar com exceções em Python, em comparação com C ++
Editar
Eu sei que posso encapsular target, definir funções separadas ou usar o gerenciador de contexto . Procuro uma solução simples, elegante e idiomática que não exija mais do que 5 linhas