Saída amável do console em Python

5

Alguns programas são capazes de alterar a saída do console, wget facilmente vem à mente.

Como posso fazer isso em Python puro? Eu sei que o IPython tem clear_output () . Eu tentei isso, mas mesmo isso não funciona. E eu preferiria puro Python.

from IPython.core.display import clear_output
from time import sleep

for i in range(100):
    clear_output()
    print '[', '='*i, ' '*(100-i), ']'
    sleep(0.1)

    
por ArekBulski 12.04.2015 / 20:15

3 respostas

5

Na verdade, existem vários pacotes que permitem escrever uma interface de linha de comando. Eu sei que o clique tem uma barra de progresso , por exemplo.

Ah, e em relação à sua exigência "pure python", que meu amigo é algo que não é cético. O Python quer que você use pacotes de terceiros.

    
por don.joey 12.04.2015 / 21:58
11

Embora uma biblioteca adequada seja a melhor solução, gostaria de mostrar uma alternativa simples: use \r (retorno de carro) em vez de \n (alimentação de linha) para terminações de linha, para que o cursor seja colocado no início da linha atual, em vez de na próxima linha.

#! /usr/bin/python3

from time import sleep

for i in range(100):
    print('[' + '='*i + ' '*(100-i) + ']', end='\r')
    sleep(0.1)
    
por muru 12.04.2015 / 21:04
6

A solução sugerida por Helio funciona muito bem! Eu precisei de pip install progressbar primeiro, mas um dos exemplos oficiais funciona como um encanto.

from progressbar import *    
pbar = ProgressBar(widgets=[Percentage(), Bar()], maxval=300).start()
for i in range(300):
    time.sleep(0.01)
    pbar.update(i+1)
pbar.finish()

Site oficial (com exemplos): link

    
por ArekBulski 12.04.2015 / 20:46