es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo actualizar una stdout en Python

Hola y gracias de antemano por tu ayuda,
De hecho, tengo una barra de progreso con varias opciones que me gustaría ver actualizadas en lugar de pasar tiempo limpiando la consola.

mientras True:
    #system("cls")
    sys.stdout.write("\rBuscando {} --- [Actualmente {} encontrados] \nCargando [".format(entry, count_result) + "="*int(100 * count / nb_files) + " "*(100-int(100 * count / nb_files)) + "] {}%".format(int(round(float(int(100 * count / nb_files))))) + "\n")
    sys.stdout.flush()
    sleep(0.5)
    if int(100 * count / nb_files) == 100:
        sleep(1)
        system("cls")
        break

Entonces me gustaría saber si hay alguna forma, he buscado en todas partes para tratar de entender, pero no entiendo cómo podría hacerlo en mi caso. Gracias de antemano

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    ¡Hola!

    Si entiendo correctamente, estás buscando una forma de actualizar la barra de progreso sin borrar la consola. Una manera de hacer esto en Python es utilizando el carácter de retorno de carro (\r) para mover el cursor al inicio de la línea, y luego imprimir la barra de progreso actualizada.

    En tu fragmento de código, ya estás utilizando \r para mover el cursor al inicio de la línea. Puedes actualizar la barra de progreso cambiando la cadena que pasas a sys.stdout.write(). Por ejemplo, podrías definir una función que tome el porcentaje de progreso como argumento y devuelve una cadena que representa la barra de progreso actualizada.

    Aquí tienes un ejemplo de función:

    def obtener_barra_de_progreso(porcentaje_de_progreso):
        num_llenos = int(porcentaje_de_progreso/5) # 5% por caracter lleno
        num_vacios = 20 - num_llenos
        return f"[{'='*num_llenos}{' '*num_vacios}] {porcentaje_de_progreso}%"
    

    Esta función toma el porcentaje de progreso como argumento, calcula el número de caracteres llenos y vacíos en la barra de progreso y devuelve una cadena que representa la barra de progreso actualizada.

    Puedes utilizar esta función en tu bucle while para actualizar la barra de progreso sin borrar la consola:

    while True:
        sys.stdout.write(f"\r{obtener_barra_de_progreso(porcentaje_de_progreso)}")
        sys.stdout.flush()
        time.sleep(0.5)
        if porcentaje_de_progreso == 100:
            time.sleep(1)
            break
    

    Reemplaza “porcentaje_de_progreso” con el porcentaje de progreso real en tu código.

    ¡Espero que esto te ayude!

Comments are closed.