我在unix环境中创建了一个小的perl程序:
#! /usr/bin/perl
use strict;
use warnings;
my $counter = 0;
while ($counter < 10) {
printf "%s\n", $counter;
$counter++;
sleep(2);
}
如果我在命令行启动它,它将在20秒内从0到9计数。这就是我想要的。
但如果我使用命令将输出传输到文件(myprog.pl >> myprog.log
),那么输出将在程序结束时(20秒后)立即写入。
我希望程序将输出逐行写入文件。因此,在10秒后,myprog.log
中应该有5行。有没有办法做到这一点?
答案 0 :(得分:11)
这是预期的缓冲行为,但您的脚本可以change that。
#! /usr/bin/perl
use strict;
use warnings;
$| = 1; # <------- Enable autoflush
my $counter = 0;
while ($counter < 10) {
printf "%s\n", $counter;
$counter++;
sleep(2);
}
答案 1 :(得分:2)
关于这个主题的有趣讨论:http://perl.plover.com/FAQs/Buffering.html