Изменяемый консольный вывод в Python

Некоторые программы могут изменять вывод консоли, wget легко приходит на ум.

enter image description here

Как я могу сделать это на чистом Python? Я знаю, что IPython имеет clear_output () . Я пробовал это, но даже это не работает. И я бы предпочел чистый 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)

asciicast

5
задан 12 April 2015 в 23:19

3 ответа

Существует на самом деле много пакетов, которые позволяют Вам писать интерфейс командной строки. Я знаю, что щелчок имеет индикатор выполнения , например.

, О, и относительно Вашего требования "чистый Python", что мой друг - что-то, что является unpythonic. Python хочет, чтобы Вы использовали сторонние пакеты.

asciicast

5
ответ дан 12 April 2015 в 23:19

Хотя надлежащая библиотека является лучшим решением, я хотел бы показать простую альтернативу: используйте \r (возврат каретки) вместо \n (перевод строки) для окончаний строки, так, чтобы это курсор было помещено в начале текущей строки, вместо на следующей строке.

#! /usr/bin/python3

from time import sleep

for i in range(100):
    print('[' + '='*i + ' '*(100-i) + ']', end='\r')
    sleep(0.1)
11
ответ дан 12 April 2015 в 23:19

Решение, которому подсказывают Helio, работает отлично! Мне было нужно к pip install progressbar первый, но тогда одна из официальных работ в качестве примера как очарование.

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()

официальный сайт (с примерами): https://code.google.com/p/python-progressbar /

6
ответ дан 12 April 2015 в 23:19

Другие вопросы по тегам:

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