如何让命令行实用程序更新一行而不是打印多行?

时间:2014-02-16 04:54:13

标签: ruby command-line-interface

我正在编写一个Ruby命令行实用程序,我希望它能够使用新数据更新控制台中的一行,而不是打印多行输出。 我使用的效果类似于使用wget时可能会看到的控制台进度条

例如:

app.rb

#!/usr/bin/ruby env

data = %w[this is some data]
data.each {|s| puts s}

当我运行此应用程序时,它将输出以下4行:

$ ruby app.rb
this
is
some
data
$

我希望以下示例中的[]之间的区域显示输出,一次一个字。

$ ruby app.rb
[ this ]
$

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

使用\r(回车)将光标移动到行的开头:

data = %w[this is some data]
data.each { |s|
  sleep(0.5)
  print "\r%-20s" % s  # `print` instead of `put` to avoid newline.
  # Additional spaces to overwrite remaining characters of previous output
}
puts

请参阅Demo

答案 1 :(得分:0)

如果您想在同一行打印,请使用print s代替puts s