Comment rediriger temporairement stdout et stderr dans les méthodes Python ?

DDD
Libérer: 2024-10-28 12:09:01
original
467 Les gens l'ont consulté

How to Temporarily Redirect stdout and stderr in Python Methods?

Redirection temporaire de stdout et stderr

Est-il possible de rediriger temporairement stdout et stderr, spécifiquement pour la durée d'une méthode en Python ?

Le piège des solutions existantes :

Les solutions CurrentUserSolutions, malheureusement, ne redirigent pas véritablement les flux ; au lieu de cela, ils les remplacent simplement entièrement. Cependant, cette approche échoue si une méthode possède une copie locale de l'un ou l'autre flux (par exemple, en raison de son utilisation comme paramètre).

Solution basée sur le gestionnaire de contexte :

Encapsuler la logique de redirection dans un gestionnaire de contexte résout ce problème. Voici un exemple :

<code class="python">import os
import sys

class RedirectStdStreams:
    def __init__(self, stdout=None, stderr=None):
        self._stdout = stdout or sys.stdout
        self._stderr = stderr or sys.stderr

    def __enter__(self):
        self.old_stdout, self.old_stderr = sys.stdout, sys.stderr
        self.old_stdout.flush(); self.old_stderr.flush()
        sys.stdout, sys.stderr = self._stdout, self._stderr

    def __exit__(self, exc_type, exc_value, traceback):
        self._stdout.flush(); self._stderr.flush()
        sys.stdout = self.old_stdout
        sys.stderr = self.old_stderr

if __name__ == '__main__':

    devnull = open(os.devnull, 'w')
    print('Fubar')

    with RedirectStdStreams(stdout=devnull, stderr=devnull):
        print("You'll never see me")

    print("I'm back!")</code>
Copier après la connexion

Lorsqu'il est utilisé comme indiqué dans l'exemple, ce gestionnaire de contexte redirige temporairement stdout et stderr vers /dev/null, garantissant que toute sortie de la ligne "Vous ne me verrez jamais" est effectivement masqué pendant que la redirection est active.

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
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!