Capturer la sortie du programme : au-delà des solutions naïves
Dans les scripts Python, capturer la sortie du programme pour un traitement ultérieur est un besoin courant. Même si les solutions naïves peuvent paraître simples, elles échouent souvent. Considérez le script suivant qui écrit sur stdout :
# writer.py import sys def write(): sys.stdout.write("foobar")
La tentative de capture de la sortie à l'aide du code suivant échoue :
# mymodule.py from writer import write out = write() print(out.upper())
Pour capturer efficacement la sortie, une solution plus robuste est requise . Une approche consiste à modifier le flux stdout du système :
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 :
Pour Python 3.4 et versions ultérieures, une solution plus simple et plus concise est disponible en utilisant le gestionnaire de contexte contextlib.redirect_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()
Cette approche élégante simplifie le processus de capture de sortie, le rendant plus facile à gérer dans vos scripts Python.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!