我正在将一些jpg图像转换为png w / imagemagick&在perl中有以下内容:
system("convert $jpg $png");
print "$?\n";
有没有办法从imagemagick中捕获实际的错误(而不仅仅是它是否像上面代码中那样成功执行了?)
注意:我仅使用imagemagick作为示例....这是关于如何从system()执行的任何程序中捕获错误的更一般的问题。
THX!
答案 0 :(得分:3)
来自IPC::Run联机帮助页:
use IPC::Run qw{run timeout};
my ($in, $out, $err);
run [convert => ($jpg, $png)], \$in, \$out, \$err, timeout( 10 ) or die "$err (error $?)"
你也可以像这样使用PerlMagick:
use Image::Magick;
my $p = new Image::Magick;
$p->Read($jpg);
$p->Write($png);
答案 1 :(得分:0)
答案 2 :(得分:0)
如MkV所述,IPC :: Run是最佳解决方案。如果可能,请使用它。
如果您处于一个不允许安装CPAN模块的破碎环境中,那么一个棘手的解决方法是使用shell重定向进行管道攻击:
open my $fh, '-|', "convert \Q$jpg\E \Q$png\E 2>&1"
or die "Can't launch 'convert'";
...然后根据需要阅读并解析$fh
。 \Q
... \E
转义文件名,并且必须避免包含空格或其他shell元字符的文件名出现问题。您还应该将它们与system()
一起使用以避免出现同样的问题。