0
在其中一篇文章中,建议使用以下方法将STDOUT捕获到文件而不影响在STDOUT(终端)上进行日志记录。打印STDOUT到文件和标准输出perl
open my $tee, "|-", "tee E:/log.txt";
对于序列象下面这样:
print $tee "Log1\n";
print $tee "Log2\n";
my $input = <STDIN>;
print $tee "Log3\n";
我看不出有任何消息在终端除非我提供输入。当我键入任何字符,然后按回车,然后我看到日志来为
Log1
Log2
Log3
有没有办法这样,我得到的第一个两路输出,然后等待输入,然后第三输出?
或者有什么方法可以捕获STDOUT日志到一个文件,同时STDOUT日志还在终端上吗?
或者你的文件句柄缓冲输出:使用IO ::处理; $ tee-> autoflush(1); –
谢谢,这工作正如我所料。你能解释一下,这是干什么的? '$ | = 1'是什么意思? –
这是Unix C库中的一个特性,它也被Perl使用。为了优化资源使用,它不会立即写入输出,而是等到缓冲区已满或直到控制台输入为止。 $ |特殊变量可以用来在Perl中关闭这种行为。另见这里:http://perldoc.perl.org/perlvar.html#Variables-related-to-filehandles。 –