显示和捕获STDOUT

时间:2016-04-05 22:03:42

标签: perl stdout

对我而言,我正在做的事情似乎应该相当简单,所以我可能会在回答后面对。话虽如此:

我正在尝试从PERL脚本中调用外部(非PERL)函数。我希望将函数中的STDOUT打印到控制台(当它发生时),并且我想捕获该信息并将其返回到调用它的原始PERL脚本。

尝试的解决方案包括:

#does not return the output
my @output = system($cmd);

#does not display the output as it occurs
my @output = `$cmd`;

#does not display the output as it occurs
eval {$pid = open3($Input, $Output, $Error, $cmd); }; die "open3: $@\n" if $@;

有没有人知道一种方法,既可以将STDOUT打印到屏幕上(实时),也可以捕获STDOUT并将其返回到原始呼叫源?

1 个答案:

答案 0 :(得分:2)

Capture::Tiny可以做到这一点。之后您可以自己capture_stdoutprint,也可以使用tee_stdout同时打印和捕获它。

use strict;
use warnings;
use Capture::Tiny 'tee_stdout';

my $stdout = tee_stdout sub { `ls -lah` }; # prints
print "ok\n" if $stdout =~ m/\./;          # matches