Utilisation with
Sur la base de la solution de @FakeRainBrigand, je propose une solution plus sûre :
import os, sys
class HiddenPrints:
def __enter__(self):
self._original_stdout = sys.stdout
sys.stdout = open(os.devnull, 'w')
def __exit__(self, exc_type, exc_val, exc_tb):
sys.stdout.close()
sys.stdout = self._original_stdout
Vous pouvez alors l'utiliser comme suit :
with HiddenPrints():
print("This will not be printed")
print("This will be printed as before")
C'est beaucoup plus sûr car vous ne pouvez pas oublier de réactiver stdout, ce qui est particulièrement critique lors de la gestion des exceptions.
Sans with
- Mauvaises pratiques
L'exemple suivant utilise les fonctions d'activation/désactivation des impressions qui ont été suggérées dans la réponse précédente.
Imaginez qu'il existe un code susceptible de soulever une exception. Nous devons utiliser finally
afin d'activer les impressions dans tous les cas.
try:
disable_prints()
something_throwing()
enable_prints() # This will not help in case of exception
except ValueError as err:
handle_error(err)
finally:
enable_prints() # That's where it needs to go.
Si vous avez oublié le finally
aucune de vos print
n'imprime plus rien.
Il est plus sûr d'utiliser le with
qui garantit que les impressions seront réactivées.
Remarque : il n'est pas sûr d'utiliser sys.stdout = None
car quelqu'un pourrait appeler des méthodes comme sys.stdout.write()