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