Capturando a saída do programa: além das soluções ingênuas
Em scripts Python, capturar a saída do programa para processamento adicional é uma necessidade comum. Embora as soluções ingénuas possam parecer simples, muitas vezes são insuficientes. Considere o seguinte script que grava em stdout:
# writer.py import sys def write(): sys.stdout.write("foobar")
A tentativa de capturar a saída usando o seguinte código falha:
# mymodule.py from writer import write out = write() print(out.upper())
Para capturar efetivamente a saída, é necessária uma solução mais robusta. Uma abordagem envolve modificar o fluxo padrão do sistema:
import sys from cStringIO import StringIO # Redirect stdout to a StringIO object backup = sys.stdout sys.stdout = StringIO() # Perform the write operation write() # Retrieve and restore stdout out = sys.stdout.getvalue() sys.stdout.close() sys.stdout = backup # Process the captured output print(out.upper())
Context Manager for Python 3.4 :
Para Python 3.4 e posterior, uma solução mais simples e concisa está disponível usando o contextlib. gerenciador de contexto redirecionado_stdout:
from contextlib import redirect_stdout import io f = io.StringIO() # Redirect stdout to f using the context manager with redirect_stdout(f): help(pow) # Retrieve captured output from f s = f.getvalue()
Essa abordagem elegante simplifica o processo de captura de saída, facilitando o manuseio em seus scripts Python.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3