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