2016-09-13 151 views
0

對不起,如果我的英文不好。Perl,用管道執行bash命令

我有一個bash命令:

convert somefile1.png somefile2.png -resize '200x200!' MIFF:- | compare -metric AE -fuzz '5%' - null:- 

命令返回的號碼,我怎樣才能得到我的Perl腳本這個值?

我的代碼:

my $s_command = 
    "convert " . $s_img1_path . " " . 
    $s_img2_path . " -resize '" . 
    $N_IMAGEMAGICK_IMG_SIZE . "x" . $N_IMAGEMAGICK_IMG_SIZE . 
    "!' MIFF:- | compare -metric AE -fuzz '5%' - null:-"; 

my $s_out = `$s_command`; 

但我不能得到$ S_OUT的返回值。而且,這個值會自動標準化,爲什麼?

+0

'my $ com ='find ./parse_CDATA -type f'; my @files = \'$ com \'; chomp @files;'你可以在perl中使用這樣的管道! – AbhiNickz

+4

也許convert | compare的輸出轉到STDERR,而不是STDOUT。 – toolic

+3

我能否指出你的英語流利程度令人印象深刻。如果你正確地使用「另外」,你遠遠領先於大多數母語:-) –

回答

0

我跑以下代碼:

#!/usr/bin/perl -w 
use strict; 

my $cmd = "grep strict test.pl -n|cut -c1-12"; 
my $result = `$cmd`; 
print $result; 

被按預期輸出到STDOUT(我跑這個代碼grep的,實際上):

2:use strict 
4:my $cmd = 

當我註釋掉print線,沒有輸出到STDOUT。 也許這個問題與STDERR有關,你應該檢查一下。

+0

@Daniel剛剛在問題中看到了你的評論。很高興它解決了 – yonyon100