2

我有以下命令行,通过 perl 脚本每秒输出 vmstat 并在每行上加上时间戳:

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

addtimestamp.pl 的内容:

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

那么为什么不将输出重定向到“File_1”文件呢?

当我不这样做时,它完美地工作,它每秒完美地打印输出,完全没有问题。

4

1 回答 1

4

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

您需要设置 stdout 以使用行缓冲:

$|=1;

搜索 [perl line buffered output] 你会看到很多关于这个的结果。

于 2012-12-11T07:35:09.197 回答