使用ruby在命令提示符中写入以前的输出行

时间:2011-01-21 19:16:31

标签: ruby command-line

我运行输出一行的命令行程序,然后稍后更新该行。但是对于ruby,我似乎只能输出一行,然后输出另一行。

我现在输出的是什么:

Downloading file:
11MB 294K/s
12MB 307K/s
14MB 294K/s
15MB 301K/s
16MB 300K/s
Done!

相反,我想看到这个:

Downloading file:
11MB 294K/s

过了一会儿:

Downloading file:
16MB 300K/s
Done!

我的ruby脚本输出的行显示下载的文件大小和传输速度,每次都会被覆盖,而不是将更新的值列为整个新行。

我目前正在使用puts来生成输出,这显然不是针对这种情况设计的。是否有不同的输出方法可以实现这一结果?

1 个答案:

答案 0 :(得分:39)

使用\r将光标移动到行的开头。并且您不应该使用puts添加\n,而是使用print。像这样:

print "11MB 294K/s"
print "\r"
print "12MB 307K/s"

要注意的一件事是:\r不会删除任何东西,它只是将光标向后移动,因此您需要用空格填充输出以覆盖之前的输出(如果它更长)。

默认情况下,当\n打印到标准输出时,将刷新缓冲区。现在,您可能需要在STDOUT.flush之后使用print来确保立即打印文本。