Subject: | Progress bar artefacts |
Date: | Mon, 22 Jun 2020 09:48:51 +0200 |
To: | bug-Progress-Any-Output-TermProgressBarColor [...] rt.cpan.org |
From: | Niel Lambrechts <niel.lambrechts [...] gmail.com> |
Hi there,
Thanks for this great progress bar.
When I test the below script, I get progress bar artefacts in my log output as per the below (you can see there are two progress bars left over on the same lines as "Doing task …" that I have highlighted in bold).
Is it possible to avoid this in my output?
$ ./test.pl
Starting
Doing task 1/3 ... nlmacbook4 : SCRIPT: COMPLETED OK
Doing task 2/3 ...
Doing task 3/3 ... ]5m22s left
Finished. ]5m22s left
NLMacBook:tmp$ ./test.pl ]5m22s left
Starting
Doing task 1/3 ... nlmacbook4 : SCRIPT: COMPLETED OK
There's something wrong with item 2
There's something wrong with item 44
Doing task 2/3 ...================================================================================ ]1s left
Doing task 3/3 ...=================================================================================== ]5s left
Finished.============================================================================================= ]1s left
Script used for testing (standard one from website):
#!/usr/bin/env perl
use 5.010;
use strict;
use warnings;
use Log::Any '$log';
use Log::Any::Adapter 'Screen', min_level=>'info';
use Progress::Any '$progress';
use Progress::Any::Output ('TermProgressBarColor', fh=>\*STDERR, width => 120);
use Time::HiRes qw(sleep time);
$|++;
$progress->target(3);
$log->info('Starting');
$log->info('Doing task 1/3 ... nlmacbook4 : SCRIPT: COMPLETED OK');
{
my $target1 = 30+int(40*rand());
my $progress1 = Progress::Any->get_indicator(task => '1');
$progress1->target($target1);
#2 Progress::Any::Output->set({task=>'1'}, 'TermMessage', fh=>\*STDERR, template => '[%-8t] [%P/%2T] %m');
Progress::Any::Output->set({task=>'1'}, 'TermProgressBarColor', fh=>\*STDERR, width => 120);
for (1..$target1) {
$progress1->update(pos => $_/$target1);
if (rand() < 0.025) {
$log->warn("There's something wrong with item $_");
}
sleep 0.1;
}
$progress1->stop;
$progress1->finish;
}
$progress->update(pos => 1);
$log->info('Doing task 2/3 ...');
{
my $target2 = 30+int(40*rand());
for (1..$target2) {
$progress->update(pos => 1 + $_/$target2);
sleep 0.1;
}
}
$log->info('Doing task 3/3 ...');
{
my $target3 = 30+int(40*rand());
for (1..$target3) {
$progress->update(pos => 2 + $_/$target3);
sleep 0.1;
}
}
$log->info('Finished.');
$progress->finish;
exit 0;