【问题标题】:ImageMagick not working, and not giving error messages eitherImageMagick 不工作,也没有给出错误信息
【发布时间】:2011-05-16 16:37:39
【问题描述】:

我为一个客户端编写了一些 Perl 代码,其中一部分是使用 ImageMagick 的 convert 调整图像大小。

这是通过反引号完成的,以这种方式捕获输出:

$output = `convert foo.jpg foo.gif 2>&1`; # simplified example

最近我客户的托管公司进行了他被告知的“DNS 更改”,并且从那个日期*起,该命令不起作用,不仅如此,也没有 $output。

假设发生了一些事情,比如他被转移到没有 ImageMagick 的服务器,或者库的安装或更新失败——我不应该从中得到什么吗?至少“找不到转换”?我也尝试过 system() 并且它是一样的。图像未转换,没有任何返回。

很遗憾,命令行访问不可用。

* 我想这实际上可能是巧合。

【问题讨论】:

  • PerlMagick 是一种选择吗?

标签: perl unix command-line imagemagick


【解决方案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,出错时返回非零数值。

【讨论】:

    【解决方案2】:

    他们可能没有安装 shell(想想 perl/mod_perl 在 chroot 中运行),因此根本无法执行反引号(因为它们涉及调用 sh -c 'convert ...'。始终检查 $?$!

    【讨论】:

    • 请注意,我也尝试了 system(),并注意此代码直到最近才正常工作,并且客户端被告知仅更改 DNS。
    • 我刚刚检查过——反引号和 system() 都适用于一个简单的ls 命令,所以它们确实有某种外壳。
    • 普通的“ls”不显示 /bin/sh 存在。 perl 在内部处理简单的情况,只有在存在元字符(如重定向)时才使用真正的 shell
    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2014-12-10
    • 2014-01-03
    • 1970-01-01
    • 2014-09-30
    相关资源
    最近更新 更多