2015-09-25 115 views
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日志还在终端上吗?

回答

0

设置使用

$old_fh = select($tee); 
$| = 1; 
select($old_fh); 
+0

或者你的文件句柄缓冲输出:使用IO ::处理; $ tee-> autoflush(1); –

+0

谢谢,这工作正如我所料。你能解释一下,这是干什么的? '$ | = 1'是什么意思? –

+0

这是Unix C库中的一个特性,它也被Perl使用。为了优化资源使用,它不会立即写入输出,而是等到缓冲区已满或直到控制台输入为止。 $ |特殊变量可以用来在Perl中关闭这种行为。另见这里:http://perldoc.perl.org/perlvar.html#Variables-related-to-filehandles。 –

相关问题