Lors de l'utilisation de bibliothèques qui se connectent à la sortie standard, la capture de leur sortie peut fournir des informations sur leur comportement. Cet article explore une solution de contournement pour réaliser une capture stdout pour les appels de fonctions arbitraires en Python.
Pour capturer la sortie stdout dans des blocs de code spécifiques, envisagez d'utiliser un gestionnaire de contexte comme celui-ci :
<code class="python">from io import StringIO import sys class Capturing(list): def __enter__(self): self._stdout = sys.stdout sys.stdout = self._stringio = StringIO() return self def __exit__(self, *args): self.extend(self._stringio.getvalue().splitlines()) del self._stringio # free up some memory sys.stdout = self._stdout</code>
Pour utiliser ce gestionnaire de contexte, enveloppez simplement l'appel de fonction :
<code class="python">with Capturing() as output: do_something(my_object)</code>
La variable de sortie contiendra désormais un liste des lignes imprimées par l'appel de fonction.
Le gestionnaire de contexte peut être utilisé plusieurs fois, et les résultats seront concaténés. Par exemple :
<code class="python">with Capturing() as output: print('hello world') print('displays on screen') with Capturing(output) as output: # note the constructor argument print('hello world2') print('done') print('output:', output)</code>
Cela produira le résultat :
displays on screen done output: ['hello world', 'hello world2']
Dans Python 3.4 et supérieur, contextlib.redirect_stdout() fournit une approche alternative pour rediriger la sortie standard. Cependant, le gestionnaire de contexte Capturer offre l'avantage d'être à la fois un gestionnaire de liste et un gestionnaire de contexte.
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!