2012-05-23 35 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! –

相关问题