dibujar en la consola

heimy ricardo.cardenes en gmail.com
Mar Mayo 26 01:19:11 CEST 2009


2009/5/25 Maikel Ortega Hernandez <maikeloh en cfg.rimed.cu>:
> Hola, estoy desarrollando una aplicación que itera sobre una gran cantidad
> de ficheros y me gustaría  poder mostrar en la pantalla  una información
>  visual sobre el  estado del proceso, es decir quisiera poder dibujar en la
> consola algo como un progres bar que me indique el total de ficheros sobre
> los cuales estoy iterando y el por ciento por el que me encuentro. Alguien
> me podría recomendar alguna vía de solución para ello. Gracias de antemano
> por su ayuda

Hola Maikel,

Si es para la consola y siempre que estemos hablando de Linux/Unix (no
lo he probado en DOS), esto te puede valer de ejemplo:

> from time import sleep
> import sys
>
> c = 0
> while c <= 20:
>     sys.stdout.write("[%s%s]\r" % ("=" * c, " "*(20-c)))
>     sys.stdout.flush()
>     c+=1
>     sleep(0.5)
> print

Te explico. Estoy usando sys.stdout.write, aunque de igual manera
podría usar "print" (poniendo una "," al final de la orden, para que
no introduzca un salto de línea "\n" implícito). El truco entonces
está en: no enviar un "\n", que es un salto de línea, sino un "\r",
que es un retorno de carro. Eso hace que el cursor vuelva al inicio de
la línea y lo siguiente que escribas "machaca" lo que había antes.

Ojo, la salida pasa por un búfer que no se vacía de forma automática
hasta que no se llena o hasta que no aparece un "\n". Mientras no se
vecíe el búfer, no se muestra nada por pantalla. Sin embargo, se puede
forzar ese vaciado y es para eso que se ejecuta el "flush" tras
imprimir.

Saludos,
Ricardo
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es