Boa Noite galera,
Estou querendo controlar o sys.stdout.write para fazer uma barrinha de progresso, tipo a do wget no shell, segue uma imagem abaixo:
http://i55.tinypic.com/avo0tl.png
Quero fazer o seguinte:
Deixar 100 caracteres entre dois colchetes, por exemplo:
[==========> ]
Entre os dois colchetes tem 100 caracteres, o problema é que o segundo
colchetes deve permanacer parado e no print sysout eu teria que deletar caracteres para obter este efeito.
Alguém tem idéia disso ?
Obrigado.
Victor Jabur
011/3/10 victorjabur <victo...@gmail.com>
> Estou querendo controlar o sys.stdout.write para fazer uma barrinha de
> progresso, tipo a do wget no shell, segue uma imagem abaixo:
>
> http://i55.tinypic.com/avo0tl.png
>
> Quero fazer o seguinte:
>
> Deixar 100 caracteres entre dois colchetes, por exemplo:
>
> [==========> ]
>
> Entre os dois colchetes tem 100 caracteres, o problema é que o segundo
> colchetes deve permanacer parado e no print sysout eu teria que deletar
> caracteres para obter este efeito.
>
> Alguém tem idéia disso ?
>
A única coisa que eu sei de console é que o "curses" ajuda.
http://docs.python.org/dev/howto/curses.html
http://docs.python.org/dev/library/curses.html#module-curses
buscando no google:
http://code.activestate.com/recipes/168639-progress-bar-class/
[As partes desta mensagem que não continham texto foram removidas]
2011/3/10 victorjabur <victo...@gmail.com>:
> Boa Noite galera,
>
> Estou querendo controlar o sys.stdout.write para fazer uma barrinha de progresso, tipo a do wget no shell, segue uma imagem abaixo:
>
> http://i55.tinypic.com/avo0tl.png
>
> Quero fazer o seguinte:
>
> Deixar 100 caracteres entre dois colchetes, por exemplo:
>
> [==========> ]
>
> Entre os dois colchetes tem 100 caracteres, o problema é que o segundo
> colchetes deve permanacer parado e no print sysout eu teria que deletar caracteres para obter este efeito.
>
> Alguém tem idéia disso ?
Oi Victor,
Eu já fiz algo assim. Eu usava o caractere '\b', que apaga caracteres
da linha atual. Se você der um '\n', já era, não apaga mais nada dali
pra trás. Então o que eu fazia era imprimir sem o '\n' e a cada
atualização eu imprimia antes uma quantidade obscena de '\b's,
efetivamente apagando tudo que eu tenha escrito na última linha.
Como você pode ver, é um método meio gambiarrento, e dificilmente vai
ser possível confiar nisso. Como era pra projetinhos pequenos e
pessoais, o "works for me" foi suficiente. Se você quiser algo mais
confiável, talvez seja melhor pesquisar sobre curses como sugeriram
mesmo...
[]s
Eduardo
esta usando linux? Procura o pythondialog, é como o dialog do shell...
http://pythondialog.sourceforge.net/
é divertido. Se precisar de algo mais complexo use o ncurses mesmo.
Demetrius Albuquerque
Linux & SO www.maltzsama.blogspot.com
Em 10 de março de 2011 21:29, Eduardo T. Cardoso
<edu...@vircio.com.br>escreveu:
[As partes desta mensagem que não continham texto foram removidas]
Victor,
2011/3/10 victorjabur <victo...@gmail.com>:
> Entre os dois colchetes tem 100 caracteres, o problema é que o segundo
> colchetes deve permanacer parado e no print sysout eu teria que deletar caracteres para obter este efeito.
>
> Alguém tem idéia disso ?
Uma maneira simples de fazer isso:
import sys
import time
size = 50
for i in range(size):
sys.stdout.write("[%s%s]\r" % ('*' * i, ' ' * (size - i - 1)))
sys.stdout.flush()
time.sleep(.25)
Os pontos principais do código são:
- Use sys.stdout.write, ele não coloca o \n como o print faz, você
pode utilizar print com vírgula no final também (python 2.x)
- Dê um flush pro output ser atualizado
- Use uma conta simples para imprimir espaços no meio da barra, assim
seu colchetes fica lá no canto parado
Abraços,
--
Danilo Cabello
Bottom-poster maniac.
Eu não usaria curses, usaria ou o metodo do Danilo (parece mais limpo)
ou o do Eduardo (parece mais simples). Curses e outras dependencias só
pra isso só vão te dar dor de cabeça quando tu quiser rodar o software
em outro lugar, além de complicarem as coisas quando tu tiver
acessando esse software de um ssh lento por exemplo (Tipo usando EDGE
ou linha discada para outro continente :).
2011/3/11 Danilo Cabello <danilo....@gmail.com>:
> Victor,
>
> 2011/3/10 victorjabur <victo...@gmail.com>:
>> Entre os dois colchetes tem 100 caracteres, o problema é que o segundo
>> colchetes deve permanacer parado e no print sysout eu teria que deletar caracteres para obter este efeito.
>>
>> Alguém tem idéia disso ?
>
> Uma maneira simples de fazer isso:
>
> import sys
> import time
> size = 50
> for i in range(size):
> sys.stdout.write("[%s%s]\r" % ('*' * i, ' ' * (size - i - 1)))
> sys.stdout.flush()
> time.sleep(.25)
>
> Os pontos principais do código são:
> - Use sys.stdout.write, ele não coloca o \n como o print faz, você
> pode utilizar print com vírgula no final também (python 2.x)
> - Dê um flush pro output ser atualizado
> - Use uma conta simples para imprimir espaços no meio da barra, assim
> seu colchetes fica lá no canto parado
>
> Abraços,
>
> --
> Danilo Cabello
> Bottom-poster maniac.
>
>
> ------------------------------------
>
> Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
> Links do Yahoo! Grupos
>
>
>
--
Leonardo Santagada
Muito obrigado mesmo pessoal.
É sempre contar com a experiência de bons programadores.
Valew.
Victor Jabur
--- Em python...@yahoogrupos.com.br, Danilo Cabello <danilo.cabello@...> escreveu
>
> Victor,
>
> 2011/3/10 victorjabur <victorjabur@...>:
> > Entre os dois colchetes tem 100 caracteres, o problema é que o segundo
> > colchetes deve permanacer parado e no print sysout eu teria que deletar caracteres para obter este efeito.
> >
> > Alguém tem idéia disso ?
>
> Uma maneira simples de fazer isso:
>
> import sys
> import time
> size = 50
> for i in range(size):
> sys.stdout.write("[%s%s]\r" % ('*' * i, ' ' * (size - i - 1)))
> sys.stdout.flush()
> time.sleep(.25)
>
> Os pontos principais do código são:
> - Use sys.stdout.write, ele não coloca o \n como o print faz, você
> pode utilizar print com vírgula no final também (python 2.x)
> - Dê um flush pro output ser atualizado
> - Use uma conta simples para imprimir espaços no meio da barra, assim
> seu colchetes fica lá no canto parado
>
> Abraços,
>
> --
> Danilo Cabello
> Bottom-poster maniac.
>
Tem também a essa biblioteca: http://code.google.com/p/python-progressbar/ que
já faz uma barra de progresso com várias outras features.
2011/3/11 victorjabur <victo...@gmail.com>
> ------------------------------------
>
> Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
> Links do Yahoo! Grupos
>
>
>
[As partes desta mensagem que não continham texto foram removidas]
Fiz dessa maneira, Victor:
"#!/usr/bin/env python
#-*- coding:utf-8 -*-
barra_comeco = '['
barra_fim = 9
for i in range(10):
print barra_comeco + '='*i + '>' + ' ' * barra_fim + ']' + str(i+1) + '
%'
barra_fim -= 1"
Ficou simples, não sei se foi assim que você pensou, mas tá aí!
ps.: Fiz até 10, mas se for isso mesmo é só mudar o índice pra 100!
Abraços
Em 10 de março de 2011 21:49, victorjabur <victo...@gmail.com> escreveu:
> Boa Noite galera,
>
> Estou querendo controlar o sys.stdout.write para fazer uma barrinha de
> progresso, tipo a do wget no shell, segue uma imagem abaixo:
>
> http://i55.tinypic.com/avo0tl.png
>
> Quero fazer o seguinte:
>
> Deixar 100 caracteres entre dois colchetes, por exemplo:
>
> [==========> ]
>
> Entre os dois colchetes tem 100 caracteres, o problema é que o segundo
> colchetes deve permanacer parado e no print sysout eu teria que deletar
> caracteres para obter este efeito.
>
> Alguém tem idéia disso ?
>
> Obrigado.
> Victor Jabur
>
>
>
> ------------------------------------
>
> Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
> Links do Yahoo! Grupos
>
>
>
--
Rômulo dos Santos Corrêa Machado
Linux User #509114
@romulo_machado_
[As partes desta mensagem que não continham texto foram removidas]
2011/3/10 victorjabur <victo...@gmail.com>
> Estou querendo controlar o sys.stdout.write para fazer uma barrinha de
> progresso, tipo a do wget no shell, segue uma imagem abaixo:
>
O efeito é obtido usando o caracter '\r', ou "retorno de carro".
Quando "impresso" ele faz com que o cursor volte ao início da linha atual e,
assim,
permite que você escreva "por cima" do que já está escrito.
É análogo à máquina de escrever.
Escrevi um código de exemplo para que você possa testar:
http://paste.pocoo.org/show/351686/
-- Rafael Valverde
[As partes desta mensagem que não continham texto foram removidas]
--
Herson Leite, Desenvolvedor Web
www.hersonls.com.br | hers...@gmail.com
[As partes desta mensagem que não continham texto foram removidas]
------------------------------------
Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/python-brasil/
<*> Para sair deste grupo, envie um e-mail para:
python-brasi...@yahoogrupos.com.br
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html