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

Patricia Arquette
Libérer: 2024-11-03 13:57:02
original
133 Les gens l'ont consulté

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>
Copier après la connexion

Pour utiliser ce gestionnaire de contexte, enveloppez simplement l'appel de fonction :

<code class="python">with Capturing() as output:
    do_something(my_object)</code>
Copier après la connexion

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>
Copier après la connexion

Cela produira le résultat :

displays on screen                     
done                                   
output: ['hello world', 'hello world2']
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!