Basado en la solución @FakeRainBrigand, sugiero una solución más segura:
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
Entonces puedes usarlo así:
with HiddenPrints():
print("This will not be printed")
print("This will be printed as before")
Esto es mucho más seguro porque no puede olvidarse de volver a habilitar stdout, que es especialmente crítico cuando se manejan excepciones.
Sin with
El siguiente ejemplo usa las funciones de habilitar / deshabilitar impresiones que se sugirieron en la respuesta anterior.
Imagine que hay un código que puede generar una excepción. Tuvimos que usar finallydeclaración para habilitar impresiones en cualquier caso.
try:
disable_prints()
something_throwing()
enable_prints()
except ValueError as err:
handle_error(err)
finally:
enable_prints()
Si olvidó la finallycláusula, ninguna de sus printllamadas imprimiría nada más.
Es más seguro usar la withinstrucción, que asegura que las impresiones se volverán a habilitar.
Nota: No es seguro de usar sys.stdout = None, porque alguien podría llamar a métodos comosys.stdout.write()