我正在尝试在命令提示符下以%打印进度。但它运作不正常。
我想将进度打印为:: Status 10%Completed 当20%完成时,它将显示状态20%已完成 在同一个地方不在新的一行。你能帮我吗?
代码::
$count++;
$per=($count/$total)*100;
print "\nStatus: $per Completed.\r";
sleep 1;
答案 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
}