繁体   English   中英

如何在不等待Perl换行的情况下立即打印文本?

[英]How can I print text immediately without waiting for a newline in Perl?

我在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); }'

你应该读一篇优秀的文章: 遭受缓冲?

请参阅常见问题解答如何刷新/取消缓冲输出文件句柄? 我为什么要这样做? 并注意:

除了$| 特殊变量,你可以使用binmode给你的文件句柄a :unix层,这是无缓冲的...

对于一般问题,您可能希望查看Time :: Progress

%b

%B

进度条看起来像:

 ##############...................... 

对我有用的是放线

STDOUT->autoflush(1);

在我之前

print ".";

在我现有的循环中。 没有使用睡眠,因为害怕减慢更多的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM