2

次の方法で Perl によって呼び出された wget からの STDOUT リターンをキャプチャして変数に入れるにはどうすればよいでしょうか?

my @urls = ('url1', 'url2', 'url3');

open(GET, "| xargs -n1 -P 3 wget -qO- ") || die "get failed: $!\n";
print GET "@urls";
4

2 に答える 2

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];
};
于 2012-08-23T00:55:56.807 に答える
0

まず、パイプは入力パイプであり、入力パイプopenと出力パイプの両方をサポートしていません。別の方法として、パイプ出力を使用して、URL ごとに 1 つのファイル ハンドルを開きます。

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);
}
于 2012-08-22T22:38:47.983 に答える