Perl ImageMagick不工作,也没有给出错误消息
我为一个客户机编写了一些Perl代码,其中部分使用ImageMagick的Perl ImageMagick不工作,也没有给出错误消息,perl,unix,command-line,imagemagick,Perl,Unix,Command Line,Imagemagick,我为一个客户机编写了一些Perl代码,其中部分使用ImageMagick的convert调整图像大小 这是通过反勾号完成的,通过以下方式捕获输出: $output = `convert foo.jpg foo.gif 2>&1`; # simplified example 最近,我的客户的托管公司做了他被告知的“DNS更改”,从那一天起*,该命令不起作用,不仅如此,也没有$output 假设他被转移到一个没有ImageMagick的服务器上,或者库的安装或更新有问题——我不应该从
convert
调整图像大小
这是通过反勾号完成的,通过以下方式捕获输出:
$output = `convert foo.jpg foo.gif 2>&1`; # simplified example
最近,我的客户的托管公司做了他被告知的“DNS更改”,从那一天起*,该命令不起作用,不仅如此,也没有$output
假设他被转移到一个没有ImageMagick的服务器上,或者库的安装或更新有问题——我不应该从中得到一些东西吗?至少有一个“未找到转换”?我也尝试过system(),结果是一样的。图像未转换,不会返回任何内容
不幸的是,命令行访问不可用
*我认为这实际上可能是一个巧合。他们可能没有安装shell(想想在chroot中运行perl/mod_perl),因此根本无法执行backticks(因为它们涉及调用
sh-c“convert…”
。请始终选中$?
和$!
,您可以使用convert来了解它在做什么
要捕获shell命令的所有输出,请使用以下命令:
use Capture::Tiny 'capture';
my @command = qw( convert foo.jpg foo.gif );
my $return_code;
my ($stdout, $stderr) = capture {
$return_code = system( @command );
};
$stdout
和$stderr
将包含它在tin上的内容。$return\u code
将返回任务本身的返回代码,在成功时通常为0,在发生错误时为非零数值。注意,我尝试了system()还有,请注意,直到最近,这段代码还运行得很好,客户被告知更改仅限于DNS。我刚刚检查了一下——backticks和system()都适用于一个简单的ls
命令,因此它们确实有某种shell。一个简单的“ls”perl在内部处理简单的情况,只有在存在元字符(如重定向)时才使用真正的shell,PerlMagick是一个选项吗?