大家好我很想知道wget只有在处理了某个url之后才能返回true或false(0或1)。我的想法是创建一个小的PERL脚本来监视我的几个网页并发送电子邮件或某种警报(我仍处于开发过程中)。 以下是我到目前为止的情况:
#!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'获取更多选项。 256 假 任何帮助将不胜感激。此外,它不一定是wget,但这是我目前所知道的。
答案 0 :(得分:2)
$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);