Maison >développement back-end >Tutoriel Python >Comment rediriger temporairement stdout et stderr dans les méthodes Python ?
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>
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!