我在perl中有一个计算密集型任务,希望在每完成一部分计算后通过打印出一个句点来告知用户计算正在进行。不幸的是,直到我打印"\n"之前,我的句点都不会被打印出来。我该如何解决这个问题?
你需要为STDOUT设置autoflush。例如:
use IO::Handle;
STDOUT->autoflush(1);
foreach (1..20) {
print '.';
sleep(1);
}
$|=1
。例如:perl -e ' $|=1; foreach (1..10) { print "$_ "; sleep(1); }'
IO::Handle
。虽然 IO::Handle
已经成为标准模块很长时间了,但是...是的。:( - Robert P除了使用特殊变量
$|
外,您还可以使用binmode
将文件句柄设置为无缓冲的:unix
层...
对于一般性问题,您可能需要查看Time::Progress:
%b
%B
progress bar which looks like:
##############......................
对我来说有效的方法是加入这行代码
STDOUT->autoflush(1);
在我的代码行之前
print ".";
在我的现有循环内。由于担心减慢速度,因此没有使用睡眠。