用反引号调用的外部程序仍会产生输出

时间:2012-05-23 18:10:29

标签: perl backticks

所以我在perl中调用外部程序并想要捕获它的输出:

my @RNAalifoldOut = `RNAalifold some parameters`;

如果从命令行调用,则输出由三行组成,例如:

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

然而,我的数组@RNAalifoldOut仅包含最后两行,并且在执行该行时,第一行直接出现在屏幕上。

这怎么可能?我想也许程序会将第一行写入STDERR,但是反引号运算符不会丢弃它吗?我该怎么做才能隐藏这个输出?

此致 尼克

1 个答案:

答案 0 :(得分:8)

您可能会看到来自 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`;