如何在 rake db:seed 期间在终端中获得动态输出
How to get dynamic output in terminal during rake db:seed
我正在处理一个相当冗长的 seed.rb
文件。
由于 rake 任务需要一段时间才能完成,我想通过控制台向用户提供视觉反馈,以便他们知道进程正在运行。
到目前为止,我有:
puts "Topic: #{i}, created..."
在创建循环中。但是,它会向终端输出发送垃圾邮件。我想要做的是让输出看起来像这样:
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
有什么想法吗?
使用控制台是老套路,与使用浏览器和 HTML 呈现的页面有很大不同。
控制台使用“\t”、“\r”、“\n”等回车控制字符。有others,但这些是最常用的。
“\r”和“\n”齐头并进。 “\r”表示return回车到原位,“\n”表示前进到下一行。在终端中,“\r”导致将光标移动到最左侧的位置。
将其保存到脚本中并运行它在命令行中:
print "foo\r"
sleep 1
print "bar\r"
sleep 1
puts "done"
你会看到打印出 "foo",光标在 "f" 上,然后是 "bar",光标在 "b" 上,然后打印出 "done"并且光标会移动到下一行。
puts
的行为不同于 print
;为什么留给你去发现。
此外,如果某些行的长度比其他行短,仅附加“\r”不足以生成美观的进度消息。互联网上有很多不同的教程介绍如何处理这个问题,我相信有 Ruby 个包。一些搜索应该揭示这些。
我正在处理一个相当冗长的 seed.rb
文件。
由于 rake 任务需要一段时间才能完成,我想通过控制台向用户提供视觉反馈,以便他们知道进程正在运行。
到目前为止,我有:
puts "Topic: #{i}, created..."
在创建循环中。但是,它会向终端输出发送垃圾邮件。我想要做的是让输出看起来像这样:
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
有什么想法吗?
使用控制台是老套路,与使用浏览器和 HTML 呈现的页面有很大不同。
控制台使用“\t”、“\r”、“\n”等回车控制字符。有others,但这些是最常用的。
“\r”和“\n”齐头并进。 “\r”表示return回车到原位,“\n”表示前进到下一行。在终端中,“\r”导致将光标移动到最左侧的位置。
将其保存到脚本中并运行它在命令行中:
print "foo\r"
sleep 1
print "bar\r"
sleep 1
puts "done"
你会看到打印出 "foo",光标在 "f" 上,然后是 "bar",光标在 "b" 上,然后打印出 "done"并且光标会移动到下一行。
puts
的行为不同于 print
;为什么留给你去发现。
此外,如果某些行的长度比其他行短,仅附加“\r”不足以生成美观的进度消息。互联网上有很多不同的教程介绍如何处理这个问题,我相信有 Ruby 个包。一些搜索应该揭示这些。