2012-12-11 42 views
2

我有vmstat的输出每秒上通过perl脚本每一行的时间戳以下命令行:为什么输出不会重定向到文件中?

vmstat 15 | /home/Beer/addtimestamp.pl > File_1 

的addtimestamp.pl的内容:

!/usr/bin/perl 
while (<>) { print localtime() . ": $_"; } 

那么,为什么没有按输出是否被重定向到“File_1”文件?

当我不这样做的时候它可以完美地工作,它每秒都能完美地打印输出,而且完全没有问题。

回答

4

当输出到终端时,perl的输出是行缓冲的,所以你会看到输出的每一行。当它的输出是一个文件时,它将被块缓冲,所以直到一个完整的块准备写入时才会看到任何输出(我想4k,但可变和系统定义)。

您需要设置标准输出使用行缓冲:

$|=1; 

搜索[perl的行缓冲输出],你会看到很多关于这个结果的。

+0

我通过上面的脚本开始工作,非常感谢你,我只是希望它在输出到文件时被默认行缓冲。 再次感谢! –

+0

迂腐,写得更好:'local $ | = 1;' – cdarke

+0

@cdarke加入'local'是什么意思? –