Существует ли хороший способ сделать следующее?
Я записал простое консольное приложение, чтобы загрузить и загрузить файлы с FTP-сервера с помощью ftplib.
Каждый раз, когда некоторые блоки данных загружаются, я хочу обновить текстовый индикатор выполнения, даже если это - просто число.
Но я не хочу стирать весь текст, это было распечатано к консоли. (Выполнение "ясного" и затем печать обновленного процента.)
Запустите это в командной строке Python (не в какой-либо IDE или среде разработки):
>>> import threading
>>> for i in range(50+1):
... threading._sleep(0.5)
... print "\r%3d" % i, ('='*i)+('-'*(50-i)),
Отлично работает в моей системе Windows.
Вот хороший пример прогресс-бара, написанный на Python: http://nadiana.com/animated-terminal-progress-bar-in-python
Но если вы хотите написать его самостоятельно. Вы можете использовать модуль curses
, чтобы сделать все проще :)
[edit] Возможно, проще - не то слово для curses. Но если вы хотите создать полноценный cui, то curses многое сделает за вас.
[edit] Поскольку старая ссылка не работает, я разместил свою собственную версию Python Progressbar, получить ее можно здесь: https://github.com/WoLpH/python-progressbar
Запишите \ r
в консоль. Это «возврат каретки» , который заставляет весь текст после него выводиться эхом в начале строки. Что-то вроде:
def update_progress(progress):
print '\r[{0}] {1}%'.format('#'*(progress/10), progress)
, что даст вам что-то вроде: [##########] 100%
Написание '\r' переместит курсор назад к началу строки.
Это отображает счетчик процентов:
import time
import sys
for i in range(100):
time.sleep(1)
sys.stdout.write("\r%d%%" % i)
sys.stdout.flush()
И еще много руководств, ожидающих гуглить.