Текстовый индикатор выполнения в [закрытой] консоли

Существует ли хороший способ сделать следующее?

Я записал простое консольное приложение, чтобы загрузить и загрузить файлы с FTP-сервера с помощью ftplib.

Каждый раз, когда некоторые блоки данных загружаются, я хочу обновить текстовый индикатор выполнения, даже если это - просто число.

Но я не хочу стирать весь текст, это было распечатано к консоли. (Выполнение "ясного" и затем печать обновленного процента.)

386
задан tshepang 9 August 2012 в 05:39
поделиться

5 ответов

Запустите это в командной строке Python (не в какой-либо IDE или среде разработки):

>>> import threading
>>> for i in range(50+1):
...   threading._sleep(0.5)
...   print "\r%3d" % i, ('='*i)+('-'*(50-i)),

Отлично работает в моей системе Windows.

6
ответ дан 22 November 2019 в 23:49
поделиться

Вот хороший пример прогресс-бара, написанный на Python: http://nadiana.com/animated-terminal-progress-bar-in-python

Но если вы хотите написать его самостоятельно. Вы можете использовать модуль curses, чтобы сделать все проще :)

[edit] Возможно, проще - не то слово для curses. Но если вы хотите создать полноценный cui, то curses многое сделает за вас.

[edit] Поскольку старая ссылка не работает, я разместил свою собственную версию Python Progressbar, получить ее можно здесь: https://github.com/WoLpH/python-progressbar

12
ответ дан 22 November 2019 в 23:49
поделиться

Запишите \ r в консоль. Это «возврат каретки» , который заставляет весь текст после него выводиться эхом в начале строки. Что-то вроде:

def update_progress(progress):
    print '\r[{0}] {1}%'.format('#'*(progress/10), progress)

, что даст вам что-то вроде: [##########] 100%

109
ответ дан 22 November 2019 в 23:49
поделиться

Написание '\r' переместит курсор назад к началу строки.

Это отображает счетчик процентов:

import time
import sys

for i in range(100):
    time.sleep(1)
    sys.stdout.write("\r%d%%" % i)
    sys.stdout.flush()
298
ответ дан 22 November 2019 в 23:49
поделиться
4
ответ дан 22 November 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: