我想要一种解决这个问题的本地方法......
我有一个perl命令可以进行调用,有时会直接将文本打印到控制台。
我想要这样的事情:
$text = get_output_from(MagicCommandICan'tChange());
if ($text neq "a specific value") {
print $text;
}
有什么办法吗?
答案 0 :(得分:7)
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
)。不过,这有点奇怪;我不会推荐它作为最好的选择。