我有一些我为客户编写的Perl代码,部分使用ImageMagick的convert
来调整图像大小。
这是通过反引号完成的,以这种方式捕获输出:
$output = `convert foo.jpg foo.gif 2>&1`; # simplified example
最近我的客户托管公司做了他被告知的“DNS更改”,并且从那个日期起*,该命令不起作用,不仅如此,也没有$输出。
假设发生了一些事情,例如他被转移到没有ImageMagick的服务器,或者是一个拙劣的安装或更新库 - 我不应该从中得到回报吗?至少有一个“转换未找到”?我也尝试过使用system(),它也是一样的。图像没有转换,没有任何回复。
不幸的是,命令行访问不可用。
*我想这实际上可能是巧合。
答案 0 :(得分:1)
您可以使用convert的debug option来了解它正在做什么。
要捕获shell命令的所有输出,请使用Capture::Tiny,如下所示:
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
将包含它在锡上的内容。 $return_code
将返回任务本身的返回码,传统上在成功时为0,或者在发生错误时为非零数值。
答案 1 :(得分:0)
他们可能没有安装shell(想想perl / mod_perl正在chroot中运行),这样根本不能执行反引号(因为它们涉及调用sh -c 'convert ...'
。总是检查$?
和{ {1}}。