0
我在程序中有很多日誌記錄,它們是打印和警告消息的混合。問題在於輸出與程序流程不同步,因此即使打印的消息在程序流程中首先出現,在打印的消息之前有時會彈出警告。我想這與打印到STDOUT並向STDERR發出警告的事實有關,並且兩者在它們出現在屏幕上之前都被緩衝。如何在Perl中同步打印和警告語句?
這個小例子演示效果:
for(my $i=0;$i<1000;$i++) {
print "++++++++++++++++++++++++++ $i\n";
warn "------------------------- $i\n";
}
你沒有得到交替+++和---線,但它們的集羣混合。
我在這裏讀到的地方有一些可以用Perl中的緩衝區做的奇特事情,但我不記得它是什麼。所以我的問題是,如何在上面的代碼中交替使用+++和---行(保留警告和打印)?
編輯:我在這裏擡頭另一個問題以及與此(感謝mpapec)用於自動沖洗上來:
use IO::Handle;
STDOUT->autoflush();
STDERR->autoflush();
for(my $i=0;$i<1000;$i++) {
STDOUT->printflush("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ $i\n");
STDERR->printflush("------------------------------------------------------------ $i\n");
}
現在這一個產生交變2條+++和兩個---線。仍然不是理想的結果。此外,它顯然不使用打印和警告,因此會迫使我改變很多代碼行。
Thx,但不適合我。即使添加了新行。產生的效果與之前不一樣,但輸出非常相似。仍然是打印和警告線的羣集。 – jackthehipster 2014-11-21 10:44:18
是的,它又一次看起來有些不同(更大的羣集),但仍然不如預期。 – jackthehipster 2014-11-21 10:54:56
奇怪。將在另一個系統上嘗試。我在Windows/Eclipse/Strawberry下試過了。 – jackthehipster 2014-11-21 12:00:00