对我而言,我正在做的事情似乎应该相当简单,所以我可能会在回答后面对。话虽如此:
我正在尝试从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并将其返回到原始呼叫源?
答案 0 :(得分:2)
Capture::Tiny可以做到这一点。之后您可以自己capture_stdout
和print
,也可以使用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