4

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

print "\r#{file_name} processed."

例如,在脚本完成之前,输出会从'file001.html' processed.to等变化。'file002.html.' processed

我想用 替换最后的进度消息Done.,但我不能只写print "\rDone.",因为那段代码输出如下内容:

Done.99.html processed.

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

4

1 回答 1

7

clr_eol您需要在使用后发送与 terminfo 变量(功能名称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'
于 2012-12-02T20:07:43.583 回答