Как я могу обновить отображение прогресса в приложении командной строки Perl? - PullRequest
5 голосов
/ 10 ноября 2008

У меня есть небольшой Perl-скрипт (в Windows), который проверяет некоторые файлы для меня в качестве помощи в повседневной работе. На данный момент он печатает что-то вроде ...

0%
25%
50%
75%
Complete

Но я могу вспомнить сценарии, которые я использовал в прошлом, которые не печатали прогресс за строкой, но обновляли вывод на дисплей, предположительно, перемещая курсор назад и перепечатывая был там.

Кто-нибудь знает, какая магия требуется? Переносимость не важна для меня, сценарий вполне одноразовый.

Ответы [ 6 ]

8 голосов
/ 10 ноября 2008

Вы можете использовать curses и сделать хороший индикатор прогресса.

EDIT : Или сделайте что-то вроде этого:

print "#####                                 [ 10%]\r";
# Do something
print "##########                            [ 20%]\r";
# Do something else
print "###############                       [ 30%]\r";
# Do some more
# ...
# ...
# ...
print "##################################### [100%]\n";
print "Done.\n";
6 голосов
/ 10 ноября 2008

Вас могут заинтересовать Умные комментарии . Это было бы, вероятно, проще, чем кодировать Ваши собственные индикаторы выполнения.

6 голосов
/ 10 ноября 2008

Если вам когда-нибудь понадобится что-то сделать в Perl, очень вероятно, что кто-то это сделал и загрузил в CPAN. Посмотрите на некоторые модули с "progress" в их названии .

6 голосов
/ 10 ноября 2008

В дополнение к другим ответам \ r вернется к началу текущей строки

2 голосов
/ 10 ноября 2008

Вы должны быть в состоянии напечатать символ возврата на клавишу '\ b', чтобы переместить курсор назад, чтобы вы могли перезаписать то, что вы печатали ранее.

0 голосов
/ 10 ноября 2008

Я не знаю, работает ли это в Perl, но в C / C ++ вы можете использовать

\b
для возврата. Используя несколько из них, вы можете переместить курсор, чтобы перезаписать старые значения.
...