[英]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.