大家好,我很想知道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/