Sou iniciante no python e estou escrevendo alguns scripts para automatizar o download de arquivos de servidores FTP, etc. Quero mostrar o andamento do download, mas quero que ele permaneça na mesma posição, como:
resultado:
Fazendo o download do arquivo FooFile.txt [47%]
Estou tentando evitar algo assim:
Downloading File FooFile.txt [47%]
Downloading File FooFile.txt [48%]
Downloading File FooFile.txt [49%]
Como devo fazer isso?
Duplicar : Como posso imprimir sobre a linha atual em um aplicativo de linha de comando?
python
console-output
escocês
fonte
fonte
Respostas:
Você também pode usar o retorno de carro:
fonte
\r
no início da linha e adicionar um\x1b[K
para limpar o texto anterior.print("sample text", end='\r", flush=True)
Python 2
Eu gosto do seguinte:
Demo:
Python 3
Demo:
Console do depurador PyCharm com Python 3
fonte
Use uma biblioteca de manipulação de terminal como o módulo de maldições :
fonte
Imprima o caractere de backspace
\b
várias vezes e substitua o número antigo pelo novo número.fonte
print 'Downloading.... \r'
) também não limpa os dados anteriores, mas evita a necessidade de saber a que distância o backup será realizado.fonte
Para Python 3xx:
fonte
Uma solução interessante que está funcionando para mim é:
O
sys.stdout.flush
é importante, caso contrário, fica realmente desajeitado e aprint("")
saída de loop on também é importante.UPDATE : Como mencionado nos comentários,
print
também tem umflush
argumento. Portanto, o seguinte também funcionará:fonte
flush=True
toprint
, para que não haja necessidade de umasys.stdout.flush()
chamada extra .fonte