我正在处理一个相当冗长的seed.rb
文件。
由于rake任务需要一段时间才能完成,我想通过控制台向用户提供视觉反馈,以便他们知道该过程正在运行。
到目前为止,我有:
puts "Topic: #{i}, created..."
在create循环中。但是,它会终止终端输出。我想做的是让输出看起来像这样:
Topic: #1..N, created...
其中输出全部保持在同一行,而不创建/n
换行符,就像当前输出的样子一样:
Topic: #1, created...
Topic: #2, created...
Topic: #3, created...
Topic: #N, created...
我试图摆弄print
,但它只是在终端线的末尾创建一个长字符串。
这是整个seed.rb
代码:
topic_list = []
i = 1
(0..9).map{
topic_list << [ Faker::Lorem.words(rand(2..5)), Faker::Lorem.sentences(rand(3..7)), rand(1..6) ]
}
topic_list.each do |title, content, author|
Topic.create!( title:title, content:content, author:author )
puts "Topic: #{i}, #{title} created..."
i += 1
end
有什么想法吗?
答案 0 :(得分:0)
处理控制台是旧学校,与使用浏览器和HTML呈现页面非常不同。
控制台使用马车控制字符,如&#34; \ t&#34;,&#34; \ r&#34;,&#34; \ n&#34;。有others,但这些是最常用的。
&#34; \ R&#34;和&#34; \ n&#34;手拉手往前走。 &#34; \ R&#34;意味着将马车返回原位,&#34; \ n&#34;意味着前进到下一行。在终端&#34; \ r&#34;导致将光标移动到最左侧位置。
将其保存到脚本并在命令行运行:
print "foo\r"
sleep 1
print "bar\r"
sleep 1
puts "done"
你会看到&#34; foo&#34;打印,用光标翻过&#34; f&#34;,然后&#34; bar&#34;,用光标翻过&#34; b&#34;,然后&#34;完成&#34;打印,光标将移动下一行。
puts
的行为与print
不同;为什么留给你发现。
另外,只需附加&#34; \ r&#34;如果某些行的长度比其他行短,则不足以生成好看的进度消息。互联网上有很多关于如何处理这个问题的不同教程,我确信有Ruby软件包。一些搜索应该揭示那些。