Pour empêcher une fonction d'imprimer dans la console de lot En Python
eh Bien, le titre me semble suffisant. J'utilise une fonction qui à certains moments l'impression de quelque chose dans la console. Comme je ne peux pas les modifier, j'aimerais savoir s'il existe une solution pour ne pas imprimer en utilisant ces fonctions.
Merci beaucoup !
Nico
5 réponses
Oui, vous pouvez rediriger sys.stdout
:
import sys
import os
sys.stdout = open(os.devnull, "w")
my_nasty_function()
sys.stdout = sys.__stdout__
il suffit de remplacer my_nasty_function
avec votre fonction réelle.
EDIT: maintenant devrait fonctionner sur windows aswell et fait usage de sys.__stdout__
au lieu d'une variable de sauvegarde.
la réponse de Constantinius la réponse est ok, cependant il n'est pas nécessaire d'ouvrir périphérique null. Et BTW, si vous voulez appareil null portable, il ya os.devnull
.
en fait, tout ce dont vous avez besoin est une classe qui ignorera tout ce que vous lui écrirez. Donc la version plus portable serait:
class NullIO(StringIO):
def write(self, txt):
pass
sys.stdout = NullIO()
my_nasty_function()
sys.stdout = sys.__stdout__
.
la solution de Constantinius fonctionnera sur * nix, mais cela devrait fonctionner sur n'importe quelle plate-forme:
import sys
import tempfile
sys.stdout = tempfile.TemporaryFile()
# Do crazy stuff here
sys.stdout.close()
#now the temp file is gone
sys.stdout = sys.__stdout__
Vous pouvez utiliser une version modifiée de ce réponse pour créer un contexte de sortie" null " pour envelopper l'appel dans la fonction.
Qui peut être fait simplement en passant os.devull
new_stdout
argument stdout_redirected()
fonction de gestionnaire de contexte lorsqu'elle est utilisée.
une autre ouverture serait d'envelopper votre fonction dans un décorateur.
import sys
from io import stringIO
class NullIO(StringIO):
def write(self, txt):
pass
def silent(fn):
"""Decorator to silence functions."""
def silent_fn(*args, **kwargs):
saved_stdout = sys.stdout
sys.stdout = NullIO()
result = fn(*args, **kwargs)
sys.stdout = saved_stdout
return result
return silent_fn
def nasty():
"""Uselful function with nasty prints."""
print('a lot of annyoing output')
return 42
# Wrap in decorator to prevent printing.
silent_nasty = silent(nasty)
# Same output, but prints only once.
nasty(), silent_nasty()