Solución:
Solo para completar, aquí hay una buena solución del blog de Dave Smith:
from contextlib import contextmanager
import sys, os
@contextmanager
def suppress_stdout():
with open(os.devnull, "w") as devnull:
old_stdout = sys.stdout
sys.stdout = devnull
try:
yield
finally:
sys.stdout = old_stdout
Con esto, puede usar la administración de contexto donde quiera que desee suprimir la salida:
print("Now you see it")
with suppress_stdout():
print("Now you don't")
Puede evitar esto asignando la salida / error estándar (no sé a cuál va) al dispositivo nulo. En Python, los archivos estándar de salida / error son sys.stdout
/sys.stderr
, y el dispositivo nulo es os.devnull
, tu también
sys.stdout = open(os.devnull, "w")
sys.stderr = open(os.devnull, "w")
Esto debería deshabilitar estos mensajes de error por completo. Desafortunadamente, esto también deshabilitará todas las salidas de la consola. Para evitar esto, desactive la salida justo antes de llamar al get_hat()
el método y luego restaurarlo haciendo
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
que restaura la salida estándar y el error a su valor original.
Para completar la respuesta de charles, hay dos administradores de contexto integrados en Python, redirect_stdout
y redirect_stderr
que puede utilizar para redirigir o suprimir la salida de un comando a un archivo o StringIO
variable.
import contextlib
with contextlib.redirect_stdout(None):
do_thing()
Para obtener una explicación más completa, lea los documentos.
Una actualización rápida: En algunos casos pasando None
podría generar algunos errores de referencia (p. ej. keras.models.Model.fit
llamadas sys.stdout.write
que será problemático), en ese caso pasar un io.StringIO()
o os.devnull
.