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 finally
declaració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 finally
cláusula, ninguna de sus print
llamadas imprimiría nada más.
Es más seguro usar la with
instrucció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()