我想本地方式来解决这个问题...Perl - 控制台输出?
我有一个perl命令,打一个电话,有时,直接打印出来的文本到控制台。
我想是这样的:
$text = get_output_from(MagicCommandICan'tChange());
if ($text neq "a specific value") {
print $text;
}
没有办法做到这一点?
我想本地方式来解决这个问题...Perl - 控制台输出?
我有一个perl命令,打一个电话,有时,直接打印出来的文本到控制台。
我想是这样的:
$text = get_output_from(MagicCommandICan'tChange());
if ($text neq "a specific value") {
print $text;
}
没有办法做到这一点?
use IO::CaptureOutput qw(capture qxx qxy);
# STDOUT and STDERR separately
capture { noisy_sub(@args) } \$stdout, \$stderr;
我假设这个Perl脚本正在调用外部可执行文件。如果输出打印在stdout上,则可以使用反引号操作符或qx
来运行该命令并捕获输出。在Unix系统上,您可以使用system()
,并使用>
运算符将输出重定向到/dev/null
。您也可以拨打open
使用以下命令:
如果文件名开头“|”,文件名被解释为 命令,其输出是用管道,如果文件名 结尾的“| ',文件名被解释为 管道输出给我们的命令。有关这方面的更多示例,请参阅perlipc中的“使用open()for IPC”的 。 (您不允许“打开” 命令,该命令可以输入和输出,但可以在perlipc中查看IPC :: Open2, IPC :: Open3以及“与另一个 过程的双向通信”)
最后,您可以关闭并重新打开STDOUT和STDERR文件句柄(编辑:IO::CaptureOutput
以下推荐)。虽然这有点奇怪,我不会推荐它作为最好的选择。
考虑改写的问题。从你的问题描述中,我认为你并不是真的想要抑制控制台输出,而是想要捕获它。 – MetaEd
你真的应该说MagicCommandICan'tChange()是什么样的命令。 Perl的?系统? – TLP