Saltar al contenido

¿Cómo suprimir la salida de la consola en Python?

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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *