Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl ImageMagick不工作,也没有给出错误消息_Perl_Unix_Command Line_Imagemagick - Fatal编程技术网

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的服务器上,或者库的安装或更新有问题——我不应该从

我为一个客户机编写了一些Perl代码,其中部分使用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是一个选项吗?