我为命令行脚本重新创建了一个微调器的实现:
class Spinner
GLYPHS = %w[| / – \\ | / – \\]
def render
Thread.new do
while true
GLYPHS.each do |glyph|
print "\r#{glyph}"
sleep 0.10
end
end
end
end
end
用作:
puts "Querying the API..."
@s = Spinner.new
@s.render
# do some stuff, return some data, output it to the command line
puts "All done."
,结果命令行输出类似于
Querying the API...[spinner is spinning here]
\RESULTS
|RESULTS
\RESULTS
|All done.
当脚本结束时,最后一个字形仍然存在。我的理解是打印字符串开头的"\r"
用于清理过去的字形。我手动打印"\r"
,这是不直观的,使代码看起来不太好。我喜欢微调器不要在结果前留下一个字形,而不必在每个输出行之前打印"\r"
。
答案 0 :(得分:0)
你需要停止线程。我稍稍调整了你的Spinner课程。
class Spinner
GLYPHS = %w[| / – \\ | / – \\]
def initialize(msg = nil)
print "#{msg}... " unless msg.nil?
@thread = Thread.new do
while true
GLYPHS.each do |glyph|
print "\b#{glyph}"
sleep 0.10
end
end
end
end
def stop(msg = nil)
@thread.exit
print "\b#{msg}\n"
end
end
运行时看起来像这样:
Querying the API.../
当这一切都这样完成时:
Querying the API...All done.