簡體   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