2012-05-23 69 views
4

所以我在Perl調用外部程序,並想捕捉它的輸出:調用反引號外部程序仍然會產生輸出

my @RNAalifoldOut = `RNAalifold some parameters`; 

如果在命令行輸出由三條線組成,比如叫做:

4 sequences; length of alignment 48. 
__GCCGA_UGUAGCUCAGUUGGG_AGAGCGCCAGACUGAAAAUCAGA 
...((((.....((((.........)))).(((((.......))))) 

但是,我的數組@RNAalifoldOut只包含最後兩行,並且第一行在執行行時直接顯示在屏幕上。

這怎麼可能?我想也許該程序將第一行寫入STDERR,但是不會被反引號操作符丟棄嗎?我能做些什麼來隱藏這個輸出?

問候 尼克

回答

7

你很可能從RNAalifold看到標準錯誤。反引擎只捕獲標準輸出。

捕捉到

my @RNAalifoldOut = `RNAalifold some parameters 2>&1`; 

標準輸出和標準錯誤,通過改變你的代碼要放棄標準錯誤,使用

my @RNAalifoldOut = `RNAalifold some parameters 2>/dev/null`; 
在類Unix平臺

。在Windows上,使用

my @RNAalifoldOut = `RNAalifold some parameters 2>nul`; 
+0

謝謝!我以爲挑剔只會扔掉stderr ... – Nick

+1

@Nick Bitte sehr! –

相關問題