Обновление нескольких строк вывода perl на терминале - PullRequest
2 голосов
/ 01 августа 2020

Я пытаюсь обновить ход выполнения моего Perl скрипта на терминале. Результат выглядит примерно так:

  Progress: |||||||||            [46%]

Прогресс продолжает обновляться, пока не достигнет 100%. Это делается путем печати «\ r» после обновления хода выполнения. Я использую sh для одновременного обновления нескольких строк, как это можно сделать? Ожидается что-то вроде этого

  Progress: |||||||||            [46%]
  Run-time: 100sec

После некоторого прогресса (и или времени) я буду sh обновить его следующим образом *

Я пробовал напечатать "\ r" два раза, чтобы go на предыдущей строке. Но это не сработало.

Я нашел похожие вопросы ( здесь и здесь ), но на них были даны ответы на Python с использованием модулей. У меня сценарий Perl, и я не предпочитаю использовать внешние модули.

1 Ответ

2 голосов
/ 01 августа 2020

Term :: ANSIScreen обеспечивает управление терминалом с использованием управляющих последовательностей ANSI:

use Term::ANSIScreen qw!savepos loadpos!;

print savepos();
for my $i (1..10) {
    print '|' x $i, "\n";
    print "Step: $i\n";
    sleep 1;
    print loadpos();
}

или

use Term::ANSIScreen qw!up!;

for my $i (1..10) {
    print '|' x $i, "\n";
    print "Step: $i\n";
    sleep 1;
    print up(2);
}

Эти константы могут использоваться вместо модуля:

my $savepos = "\e[s";
my $loadpos = "\e[u";
my $up2 = "\e[2A";

escape-коды ANSI

...