2014-02-16 53 views
3

我正在寫一個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 ] 
$ 

任何想法?

+0

呃..一次一個字?就像,你想在個人單詞之間出現人爲的顯着延遲? – roippi

+0

@roippi它不一定非得注意人類。想象一下進度條。它只用一個新字符更新控制檯的一行。這就是我要去的效果。 – franksort

+0

你想'這是一些數據'作爲輸出? – falsetru

回答

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

真棒回答。我也喜歡這種ASCIIcast。如果可以的話,我會給你更多的積分。謝謝! – franksort

+0

+1個不錯的演示鏈接... –

0

如果要在同一行中打印它們,請使用print s而不是puts s

相關問題