Perl - 抑制控制台输出?

时间:2011-11-17 18:56:14

标签: perl console

我想要一种解决这个问题的本地方法......

我有一个perl命令可以进行调用,有时会直接将文本打印到控制台。

我想要这样的事情:

$text = get_output_from(MagicCommandICan'tChange());
if ($text neq "a specific value") {
  print $text;
}

有什么办法吗?

2 个答案:

答案 0 :(得分:7)

请参阅IO::CaptureOutput

 use IO::CaptureOutput qw(capture qxx qxy);

 # STDOUT and STDERR separately
 capture { noisy_sub(@args) } \$stdout, \$stderr;

答案 1 :(得分:2)

我假设这个Perl脚本正在调用外部可执行文件。如果输出正在stdout上打印,则可以使用反引号运算符或qx来运行命令并捕获输出。在Unix系统上,您可以使用system()并使用/dev/null运算符将输出重定向到>。您也可以使用以下命令调用open

  

如果文件名以“|”开头,则文件名被解释为      用于输出输出的命令,以及文件名      以'|'结尾,文件名被解释为命令      管道输出给我们。请参阅perlipc中的“对IPC使用open()”      更多这方面的例子。 (你不能“打开”到      管道输入和输出的命令,但参见IPC :: Open2,      IPC :: Open3,以及“与另一方的双向通信”      处理“perlipc替代品。”

最后,您可以关闭并重新打开STDOUT和STDERR文件句柄(下面推荐编辑IO::CaptureOutput)。不过,这有点奇怪;我不会推荐它作为最好的选择。