Я пытаюсь написать простой инструмент, который читает файлы с диска, выполняет некоторую обработку изображений и возвращает результат алгоритма. Поскольку программа иногда может занять некоторое время, мне нравится иметь индикатор выполнения, чтобы я знал, где он находится в программе. А так как я не люблю загромождать свою командную строку и работаю на платформе Unix, я хотел использовать символ '\r' для вывода индикатора выполнения только на одной строке.
Но когда у меня есть этот код, он ничего не печатает.
# Files is a list with the filenames
for i, f in enumerate(files):
print '\r%d / %d' % (i, len(files)),
# Code that takes a long time
Я также пробовал:
print '\r', i, '/', len(files),
Теперь, чтобы убедиться, что это работает в python, я попробовал это:
heartbeat = 1
while True:
print '\rHello, world', heartbeat,
heartbeat += 1
Этот код работает отлично. В чем дело? Мое понимание возврата каретки в Linux заключалось в том, что он просто переместит символ перевода строки в начало, а затем я смогу перезаписать старый текст, который был написан ранее, если я нигде не печатаю новую строку. Хотя, похоже, этого не происходит.
Кроме того, есть ли лучший способ отобразить индикатор выполнения в командной строке, чем то, что я сейчас пытаюсь сделать?