如何通过以下方式从Perl调用wget捕获STDOUT返回并将其放入变量?
my @urls = ('url1', 'url2', 'url3');
open(GET, "| xargs -n1 -P 3 wget -qO- ") || die "get failed: $!\n";
print GET "@urls";
答案 0 :(得分:2)
如果您想一次性覆盖所有数据,IPC::Run可以做到这一点。
use IPC::Run qw(run);
run [qw(xargs -n1 -P 3 wget -qO-)], \"@urls", \my $out;
print "$out";
如果要在数据可用时处理数据,IPC::Run也可以这样做。
use IPC::Run qw(run);
run [qw(xargs -n1 -P 3 wget -qO-)], \"@urls", sub {
print $_[0];
};
答案 1 :(得分:0)
首先,your pipe is an input pipe, and open
doesn't support both input and output pipes。作为替代方案,使用管道输出并为每个URL打开一个文件句柄:
use strict;
use warnings;
my @urls=qw(url1 url2 url3);
foreach my $url(@urls)
{
open(my $get,"-|","wget $url") or die $!;
print while(<$get>);
close($get);
}