Capturer la sortie stdout à partir de scripts en Python
Lorsque vous travaillez avec des scripts externes, il devient souvent nécessaire de capturer leur sortie stdout pour un traitement ultérieur. Une approche courante consiste à utiliser la fonction write() pour imprimer la sortie, qui peut ensuite être stockée dans une variable. Cependant, cette approche ne fonctionne pas toujours, comme l'illustre le script suivant :
<code class="python"># module writer.py import sys def write(): sys.stdout.write("foobar")</code>
Pour capturer la sortie de la fonction write(), une solution impliquant le module cStringIO a été proposée :
<code class="python">import sys from cStringIO import StringIO # setup the environment backup = sys.stdout # #### sys.stdout = StringIO() # capture output write() out = sys.stdout.getvalue() # release output # #### sys.stdout.close() # close the stream sys.stdout = backup # restore original stdout print out.upper() # post processing</code>
Cependant, il existe des moyens plus efficaces et pythoniques pour atteindre cet objectif :
En utilisant contextlib.redirect_stdout (Python 3.4)
Cette méthode utilise contextlib Gestionnaire de contexte .redirect_stdout pour rediriger temporairement la sortie stdout vers un objet StringIO :
<code class="python">from contextlib import redirect_stdout import io f = io.StringIO() with redirect_stdout(f): help(pow) s = f.getvalue()</code>
Utiliser directement io.StringIO
Une autre approche consiste à créer directement un objet StringIO et Acheminez manuellement la sortie stdout vers celle-ci :
<code class="python">import io output = io.StringIO() sys.stdout = output write() sys.stdout.seek(0) captured_output = output.read()</code>
En implémentant ces méthodes, les développeurs peuvent capturer et traiter efficacement la sortie du script sans recourir à des solutions de contournement complexes.
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!