2

使用反引号,系统调用只是将 wget 数据显示到屏幕上。

我想做的是将来自 wget 的信息“通过管道”传输到字符串或数组中,而不是屏幕上。

下面是我的代码片段。

sub wgetFunct {
    my $page = `wget -O - "$wgetVal"`;

    while ( <INPUT> ) {
        #line by line operations
    }
}
4

2 回答 2

5

您可以运行任何操作系统命令(我指的是仅限 Linux)并捕获命令返回的输出/错误,如下所示:

open (CMDOUT,"wget some_thing 2>&1 |");
while (my $line = <CMDOUT>)
{
    ### do something with each line of hte command output/eror;
}

阅读OP的评论后编辑:

有什么方法可以不将 wget 信息打印到标准输出?

下面的代码将下载文件而不发布任何内容到屏幕:

#!/usr/bin/perl -w
use strict;
open (CMDOUT,"wget ftp://ftp.redhat.com/pub/redhat/jpp/6.0.0/en/source/MD5SUM 2>&1 |");
while (my $line = <CMDOUT>)
{
    ;
}

有关详细信息,请参阅perlipc

于 2013-05-14T13:21:50.580 回答
3

打开管道:

open my $input, "-|", "wget -O - $wgetVal 2>/dev/null";
while (<$input>) { 
    print "Line $_";
}
close $input;

检查连接的字符串:

open my $input, "-|", "wget -O - $wgetVal 2>&1";
while (<$input>) { 
    print "Good\n" and last if /Connecting to.*connected/;
}
close $input;
于 2013-05-14T06:25:37.610 回答