Maison >développement back-end >Tutoriel Python >Comment capturer la sortie stdout pour les appels de fonction Python ?

Comment capturer la sortie stdout pour les appels de fonction Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-03 13:57:02179parcourir

How to Capture stdout Output for Python Function Calls?

Capture de la sortie Stdout pour les appels de fonction Python

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.

Solution de gestion de contexte

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.

Utilisation avancée

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn