Re-escribiendo la misma linea
Oscar Merchan
o.merchan en bussitel.es
Mar Mayo 25 16:23:46 CEST 2004
On Tue, 25 May 2004 13:28:31 +0200
César Duque <notfound en notfound.org> wrote:
Buenas.
Yo para lo que quieres, utilizo algo mas complicado pero queda la mar de bonito y es muy funcional, no me acuerdo donde lo encontre,
solo se, que desde aquel dio lo tengo puesto en unos cuantos scripts de consola, te pongo aqui el codigo .-
import sys,os
#Definiendo los colores y la funcion de color que se van a usar en todo el programa
enable_color = 1
hotkeycol = "red"
colors = {
"black" : "30",
"red" : "31",
"green" : "32",
"brown" : "33",
"blue" : "34",
"purple" : "35",
"cyan" : "36",
"lgray" : "37",
"gray" : "1;30",
"lred" : "1;31",
"lgreen" : "1;32",
"yellow" : "1;33",
"lblue" : "1;34",
"pink" : "1;35",
"lcyan" : "1;36",
"white" : "1;37",
"lyellow" : "43"
}
def color(text, fg, bg=None, raw=0):
if not enable_color:
return text
if type(fg) in (TupleType, ListType):
fg, bg = fg
if not fg:
return text
opencol = "\033["
closecol = "m"
if raw:
opencol = r"\[\033["
closecol = r"m\]"
clear = opencol + "0" + closecol
xterm = 0
if os.environ["TERM"] == "xterm":
xterm = 1
b = ''
# In xterm, brown comes out as yellow..
if xterm and fg == "yellow":
fg = "brown"
f = opencol + colors[fg] + closecol
if bg:
if bg == "yellow" and xterm:
bg = "brown"
try:
b = colors[bg].replace('3', '4', 1)
b = opencol + b + closecol
except KeyError:
pass
return "%s%s%s%s" % (b, f, text, clear)
#Definimos la funcion que utilizaremos para la barra de progreso
def progress(ratio, length=60, col=1, cols=("lgreen", "red", "blue"),
nocol="=."):
if ratio > 1:
ratio = 1
elchar, leftchar = nocol
elapsed = int(round(ratio*length))
left = length - elapsed
bar = elchar*elapsed + leftchar*left
bar = bar[:length]
if col:
c_elapsed, c_left, perc = cols
bar = color(' '*elapsed, "gray", c_elapsed)
bar = bar + color(' '*left, "gray", c_left)
else:
bar = elchar*elapsed + leftchar*left
return bar
Y una utilizacion simple de todo ello seria .-
print "\033[20;2H"+color("0%","white")
print "\033[20;66H"+color("100%","white")
print "\033[20;5H"+(progress(total))
Yo para poner el cursor donde desee lo que hago es utilizar el codigo ansi, que es estandar y no te obliga a utilizar modulos estaños, de esa forma conseguimos un mayor compatibilidad, el codigo en el print que controla las coordenadas del cursosr es el "\033[20;2H".
> Emm... gracias ahora me siento un poco retrasado mental o algo... pero era
> lo que buscaba :)
>
> At 13:23 25/05/2004, you wrote:
> >César Duque wrote:
> >
> >>Hola, intento hacer un sencillo script para consola que parsea un
> >>archivo, es mi primer script para consola y me asalta una duda que no
> >>puedo disipar, quizás podais echarme un cable.
> >>Pretendo mostrar un porcentaje o una barra de progreso... estas cosas
> >>para dejarlo un poco bonito, la cosa es que no se hacer una cosa
> >>elemental en python y no encuentro documentación de como hacerla, esto es
> >>reescribir el % en la misma linea en la que esta el cursor a medida que
> >>vaya avanzando y no una nueva linea por cada vez que aumenten las
> >>iteraciones del bucle.
> >>
> >>Lo he intentado con curses, ignorante de mi, hasta que me he dado cuenta
> >>de que al reemplazar toda la "ventana" actual cuando intento obtener la
> >>posicion es siempre 0,0.
> >>Me interesaría que fuese en la propia linea de comandos despues de
> >>escupir el resultado sin tener que borrar la pantalla cada vez etc.
> >>
> >>A ver si me podeis orientar con esta laguna conceptual o donde puedo leer
> >>sobre esto. Gracias
> >>
> >>
> >has probado con "\r"?
> >p.e.
> > >>> print "\rhola\rjo"
> >jola
>
> _________________________
> # César Duque - error404
> # notfound [always at] notfound.org
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
Más información sobre la lista de distribución Python-es