我有一个Ruby脚本,使用回车字符在同一行输出进度消息,如下所示:
print "\r#{file_name} processed."
例如,输出从'file001.html' processed.
更改为'file002.html.' processed
,依此类推,直到脚本完成。
我想用Done.
替换上一个进度消息,但我不能只写print "\rDone."
,因为这段代码会输出如下内容:
Done.99.html processed.
我想我必须在最后一个进度消息后清空该行,然后打印Done.
。我该怎么做?
答案 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'