捕获脚本输出并在实际写入之前处理它

时间:2017-06-27 23:24:59

标签: perl

我可以控制一个perl脚本,这个脚本是另一个早期需要的CGI脚本。我需要捕获主脚本的所有输出,并能够以某种方式更改它。

这是实际的链接:

[index.cgi] > (require) > [header.pl] > (eval 'cat ...') > [my_script.pl]

我知道我可以使用END块在整个程序结束时制作后处理部分,但我需要一种方法来开始捕获所有输出。

编辑:我刚刚找到了Capture::Tiny,它允许我们:

use Capture::Tiny ':all';

($stdout, $stderr, @result) = capture {
  # your code here
};

但这需要我将所有代码放在花括号之间,这是不可行的,因为我无法访问主要的调用脚本(需要我的脚本)。这有助于澄清我想在执行句子后立即开始捕获输出。

2 个答案:

答案 0 :(得分:2)

将以下内容放入您的来电者执行的文件中。

TimerHelper.shared.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { (timer) in
    print("a")
})

答案 1 :(得分:-1)

这解决了我的问题:

my $OUTPUT;
my $OUTPUT_FH;
my $OLD_FH;

open( $OUTPUT_FH, '>', \$OUTPUT ) or die;
$OLD_FH = select $OUTPUT_FH;

END {
  select $OLD_FH;
  close $OUTPUT_FH;

  # Change the output
  $OUTPUT =~ s/pattern/replacement/flag;

  print $OUTPUT;
}

解决方案来自:How to Capture STDOUT in a variable