2012-12-11 70 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'是什麼意思? –