大家好,我很想知道wget是否可以返回真或假(0或1)只有在处理特定的url。我的想法是创建一个小的PERL脚本来监视我的几个web页面并发送电子邮件或某种警报(我仍在开发过程中)。
以下是我目前掌握的情况:

#!usr/bin/perl
use strict;
use warnings;
#use LWP::Simple;

my $url='google.com';

system('wget --delete -q $url');
print "$?";
if($? != 0 )
{
        print "false\n";
}

else
{
        print "OK\n";
}

这只是一个开始,但我试图让它尽可能安静,输出越少越好。
这是我现在的输出:
请尝试“wget--help”以获取更多选项。
二百五十六

任何帮助都将不胜感激。它也不一定是wget,但这是我目前所知道的。

最佳答案

$url不是在单引号字符串文本中插入的,因此运行了shell命令

wget --delete -q $url

除非存在环境变量url,否则将使用两个参数wget--delete执行命令-q。Wget抱怨“缺少URL”(您省略了一些错误行),并返回状态代码1。
变量$?包含命令的状态代码,乘以256。更准确地说,它是wait system call返回的值。如果$?等于零,则表示成功,这一部分是对的。失败可以是1以外的代码:任何非零值都表示失败。
如果您想看到绝对没有输出,请将输出和错误重定向到/dev/null
system("wget --delete -q $url >/dev/null 2>/dev/null");

但隐藏错误是个坏主意:如果你这样做,你就无法诊断错误。只需重定向stdout,就可以使正常输出静音而不隐藏错误。但是wget的-q选项已经做到了。
system("wget --delete -q $url");
if ($?) {
    print "false\n";
} else {
    print "OK\n";
}

此代码假定$url不包含shell特殊字符。如果不能保证,请保护所有shell特殊字符:
system('wget --delete -q ' . quotemeta($url) . ' >/dev/null 2>/dev/null');

或者,如果不忽略错误消息,请使用system的多参数形式完全跳过shell:
system('wget', '--delete', '-q ', $url);

关于linux - Wget可以返回true还是false(0或1),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21719293/

10-14 15:48