"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como capturar a saída do programa de maneira eficaz em Python: além das soluções básicas

Como capturar a saída do programa de maneira eficaz em Python: além das soluções básicas

Publicado em 2024-11-08
Navegar:847

How to Capture Program Output Effectively in Python: Beyond Basic Solutions

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.

Declaração de lançamento Este artigo foi reimpresso em: 1729147521 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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