Capture de la sortie standard des appels de fonction Python
Lors de l'utilisation de bibliothèques Python qui modifient des objets et impriment des statistiques sur la sortie standard, il peut être nécessaire de capturer cette sortie pour une analyse plus approfondie. Cependant, modifier directement la fonction pour renvoyer de telles informations n'est pas toujours réalisable.
Pour résoudre ce problème, on peut utiliser le gestionnaire de contexte de capture :
<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>
Le gestionnaire de contexte de capture peut être utilisé comme suit :
<code class="python">with Capturing() as output: do_something(my_object)</code>
Après l'appel de la fonction, la liste de sortie contiendra les lignes imprimées par la fonction.
Cette technique peut être appliquée plusieurs fois et les résultats peuvent être concaténés :
<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>
Sortie :
displays on screen done output: ['hello world', 'hello world2']
Cette approche fournit une solution de contournement efficace pour capturer la sortie stdout lorsqu'il n'est pas possible de modifier directement la fonction do_something().
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!