从qx子进程流式传输stdout

时间:2011-08-25 21:46:17

标签: perl

我有大量需要执行的脚本。我喜欢在调试时看到所述脚本的输出。

通常,print qx/foo/会收集foo的stdout输出,直到foo完成,然后打印出来。

我想将它流出来,以便我可以看到foo的输出,在某个标量中捕获foo的输出。

理想情况下:

$cmd = "foo";
$result = stream_and_store($cmd);

我有理由相信有一些复杂的方法,包括一些漂亮的CPAN模块。

我希望能够在基础Perl 5.8.8(是的,古董,但这就是环境)中做到这一点,而不添加其他依赖项。

2 个答案:

答案 0 :(得分:3)

小心你的意愿:

$output = `somecmd | tee /dev/tty`;

答案 1 :(得分:3)

my $result = '';
open my $proc, '-|', "foo";
while (<$proc>) {
    print $_;
    $result .= $_;
}

open命令的这种形式在后台启动一个进程,并在文件句柄$proc中提供其输出。