繁体   English   中英

Perl-捕获system()错误

[英]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()一起使用,以避免相同的问题。

为了获得最佳结果,请参见: 如何从一个外部命令捕获STDERR?

另请阅读上一篇:

为什么无法通过system()获得命令的输出?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM