就地进度输出到控制台:如何清空当前行

时间:2012-12-02 19:31:12

标签: ruby terminal

我有一个Ruby脚本,使用回车字符在同一行输出进度消息,如下所示:

print "\r#{file_name} processed."

例如,输出从'file001.html' processed.更改为'file002.html.' processed,依此类推,直到脚本完成。

我想用Done.替换上一个进度消息,但我不能只写print "\rDone.",因为这段代码会输出如下内容:

Done.99.html processed.

我想我必须在最后一个进度消息后清空该行,然后打印Done.。我该怎么做?

1 个答案:

答案 0 :(得分:7)

您需要发送与terminfo对应的字节序列 使用clr_eol后的变量el(功能名称\r)。有几个 你可以得到那种方式。

最简单,假设有一个常数值。在我检查过的终端上 它是\e[K,但我只检查了一对。在以下两个方面 工作原理:

clear = "\e[K"
print "foo 123"
print "\r#{clear}bar\n"

您还可以使用以下方式获取值:

clear = `tput el` 

或者您可以使用terminfo gem

require 'terminfo'
clear = TermInfo.control_string 'el'