我的脚本要求下载URL并将其发送到下载队列。下载的进度应该打印回来。
我找不到一种方法来将提示保持在底部并对其进行状态。 我尝试了对CPAN的搜索,但我找不到它的模块。
感谢您的帮助。
#!/usr/bin/perl
use 5.14.0;
use strict;
use warnings;
use Term::UI;
use Term::ReadLine;
use threads;
use Thread::Queue;
sub rndStr{ join'', @_[ map{ rand @_ } 1 .. shift ] }
my $q = Thread::Queue->new(); # A new empty queue
my $thr = threads->create(
sub {
while (defined(my $item = $q->dequeue())) {
say "Downloading: ".$item;
sleep 1;
#$q->enqueue(1..10) if $item eq '10';
$q->enqueue(rndStr rand (15)+5, 'a'..'z', 0..9);
}
}
);
$q->enqueue(rndStr 10, 'a'..'z', 0..9);
my $url;
my $term = Term::ReadLine->new('brand');
while ($url ne 'end'){
$url = $term->get_reply(
prompt => 'URL to download',
default => 'end' );
$q->enqueue($url);
}
say "Finishing remaining downloads";
$q->enqueue(undef);
$thr->join();
答案 0 :(得分:2)
say
在输出中添加换行符;请改用print
。添加回车符以覆盖上一个输出:
print "Downloading: ".$item."\r";
答案 1 :(得分:2)
您尝试做的基本操作是使用 ANSI 代码移动光标。诸如 ncurses (Windows版本:http://gnuwin32.sourceforge.net/packages/ncurses.htm)之类的内容将允许您执行此操作。
或者,您可以使用原始ASCII / ANSI代码自行完成(如这两个链接所述)
或者最后你可以使用Perl模块 Win32 :: Console :: ANSI ,它可以帮助你做到这一点:http://metacpan.org/pod/Win32::Console::ANSI
由于这是一个perl问题,我建议您查看 Win32 :: Console :: ANSI