我有以下命令行,每秒输出vmstat,每行都有一个时间戳,通过perl脚本:
vmstat 15 | /home/Beer/addtimestamp.pl > File_1
addtimestamp.pl的内容:
!/usr/bin/perl
while (<>) { print localtime() . ": $_"; }
那么为什么输出不会被重定向到“File_1”文件?
当我不这样做时,它完美地工作,它每秒都完美地打印输出,完全没有问题。
答案 0 :(得分:4)
当输出到终端时,perl的输出是行缓冲的,因此您将看到输出的每一行。当它的输出是一个文件时,它将被块缓冲,因此在完整块准备好写入之前你不会看到任何输出(我认为是4k,但是可变和系统定义)。
您需要设置stdout才能使用行缓冲:
$|=1;
搜索[perl line buffered output],你会看到很多关于此的结果。