Saltar al contenido

Impresión de terminal dinámica con python

Solución:

La forma más sencilla, si solo necesita actualizar una sola línea (por ejemplo, creando una barra de progreso), es usar 'r' (retorno de carro) y sys.stdout:

import sys
import time

for i in range(10):
    sys.stdout.write("r{0}>".format("="*i))
    sys.stdout.flush()
    time.sleep(0.5)

Si necesita una interfaz de usuario de consola adecuada que admita mover el puntero, etc., utilice el curses módulo de la biblioteca estándar:

import time
import curses

def pbar(window):
    for i in range(10):
        window.addstr(10, 10, "[" + ("=" * i) + ">" + (" " * (10 - i )) + "]")
        window.refresh()
        time.sleep(0.5)

curses.wrapper(pbar)

Es muy recomendable utilizar el curses.wrapper function para llamar a su función principal, se encargará de limpiar el terminal en caso de error, por lo que no estará en un estado inutilizable después.

Si crea una interfaz de usuario más compleja, puede crear varias ventanas para diferentes partes de la pantalla, cuadros de entrada de texto y compatibilidad con el mouse.

Como la mayoría de las respuestas ya han indicado, realmente tiene pocas opciones en Linux más que usar ncurses. Pero, ¿qué pasa si no estás en Linux o quieres algo un poco más de alto nivel para crear la interfaz de usuario de tu terminal?

Personalmente, encontré frustrante la falta de una API de terminal multiplataforma moderna en Python, así que escribí asciimatics para resolver esto. No solo le brinda una API multiplataforma simple, sino que también proporciona muchas abstracciones de nivel superior para widgets y animaciones de la interfaz de usuario que podrían usarse fácilmente para crear una interfaz de usuario superior.

El envío de salida al terminal a través del comando print () se puede realizar sin desplazarse si usa el atributo “end”.

El valor predeterminado es end = ‘ n’, que es una nueva línea.

Para suprimir el desplazamiento y sobrescribir toda la línea anterior, puede usar el escape RETURN que es ‘ r’.

Si solo desea reescribir los últimos cuatro caracteres, puede usar algunos espacios de retroceso.

print(value, "_of_", total, end='r')

NOTA
Esto funciona para el terminal del sistema estándar. El emulador de terminal en algunas herramientas como IDLE tiene un error y la ‘ r’ no funciona correctamente, la salida simplemente está concatenada con algún carácter no imprimible entre ellas.

INFORMACIÓN ADICIONAL PARA imprimir ()
En el ejemplo anterior, los espacios a cada lado de “de” están destinados a asegurar un espacio en blanco entre mis valores y la palabra “de”. Sin embargo, el separador predeterminado de print () es un “” (espacio), por lo que terminamos con un espacio en blanco entre el valor y el subrayado de “_of_”.

>> print (value, "_of_", total, end='r')
8 _of_ 17

El atributo de separador, sep, se puede utilizar para establecer caracteres entre elementos impresos. En mi ejemplo, lo cambiaré a una cadena nula (”) para que mi salida se adapte a mis necesidades.

>> print (value, "_of_", total, sep='', end='r')
8_of_17
¡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 *