[英]Perl - capture system() error
我正在将一些jpg图像转换为带有imagemagick的png并在perl中具有以下内容:
system("convert $jpg $png");
print "$?\n";
有没有一种方法可以捕获来自imagemagick的实际错误(而不只是像我在上面的代码中那样成功执行)?
注意:我仅以imagemagick为例。...这是一个关于如何从system()执行的程序中捕获错误的更普遍的问题。
谢谢!
来自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);
正如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
对文件名进行转义,这对于避免文件名包含空格或其他外壳元字符的问题是必需的。 您还应该将它们与system()
一起使用,以避免相同的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.