Capturar la salida del programa: más allá de las soluciones ingenuas
En las secuencias de comandos Python, capturar la salida del programa para su posterior procesamiento es una necesidad común. Si bien las soluciones ingenuas pueden parecer sencillas, a menudo se quedan cortas. Considere el siguiente script que escribe en la salida estándar:
# writer.py import sys def write(): sys.stdout.write("foobar")
El intento de capturar la salida usando el siguiente código falla:
# mymodule.py from writer import write out = write() print(out.upper())
Para capturar eficazmente el resultado, se requiere una solución más sólida. Un enfoque implica modificar el flujo de salida estándar del 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 para Python 3.4:
Para Python 3.4 y versiones posteriores, hay disponible una solución más simple y concisa usando contextlib. administrador de contexto de redirección_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()
Este elegante enfoque simplifica el proceso de captura de resultados, haciéndolo más fácil de manejar en sus scripts de Python.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3