使用perl将STDOUT打印到文件和STDOUT

时间:2015-09-25 11:58:02

标签: stdout stdin

在其中一篇文章中,建议将以下方法捕获STDOUT到文件而不影响STDOUT(终端)的日志记录。

open my $tee, "|-", "tee E:/log.txt";

对于如下序列:

print $tee "Log1\n";
print $tee "Log2\n";
my $input = <STDIN>;
print $tee "Log3\n";

除非我提供输入,否则我在终端上看不到任何消息。输入任何字符后按Enter键,然后我会看到日志为

Log1
Log2
Log3

有没有一种方法可以让我得到前两个输出,然后等待输入然后是第三个输出?

或者有没有办法将STDOUT日志捕获到文件中,而STDOUT日志也会继续在终端上传输?

1 个答案:

答案 0 :(得分:0)

使用

将文件句柄设置为无缓冲输出
$old_fh = select($tee);
$| = 1;
select($old_fh);