命令行perl脚本中的进度条

时间:2014-01-23 05:28:33

标签: perl perl-module

我正在尝试在命令提示符下以%打印进度。但它运作不正常。

我想将进度打印为:: Status 10%Completed 当20%完成时,它将显示状态20%已完成 在同一个地方不在新的一行。你能帮我吗?

代码::

$count++;
$per=($count/$total)*100;
print "\nStatus:  $per Completed.\r";
sleep 1;

3 个答案:

答案 0 :(得分:15)

模块Term::ProgressBar似乎能够完成您之后的工作。

注意,我还没试过。

编辑好吧,出于好奇,我现在尝试了一个小脚本:

use warnings;
use strict;

use Term::ProgressBar;

my $total = 50;
my $progress_bar = Term::ProgressBar->new($total);


for my $i (1 .. $total) {

  sleep (1);

  $progress_bar->update($i);

}

它不会完全打印您所询问的内容(例如Status nn% completed),相反,它会打印真正的进度条,例如

  10% [=====                                              ]

然而,它似乎是最简单直接的解决方案。

答案 1 :(得分:4)

您可以这样做:

use strict;
use warnings;

use Time::HiRes qw(usleep);
local $| = 1;

my @nums = 1 .. 20;

foreach my $c (@nums) {
  print "$c";
  usleep(100000);
  print ("\b" x length($c));
}
print "\n";

答案 2 :(得分:3)

对原始代码的小修改: \ n和\ r \ n将被删除 添加了autoflush和“\ 033 [G”和\ 033 [J

$|=1; #autoflush

$count = 0;
$total = 100;
while ($count != $total) {
   $count++; 
   $per=($count/$total)*100; 
   print "\033[JStatus: ${per}% Completed."."\033[G"; # man console_codes, ECMA-48 CSI sequences, "CHA"
   sleep 1
 }