【发布时间】:2015-09-29 18:03:18
【问题描述】:
此脚本创建一个伪进度条:
bar, bar2 = '', ''
10.times do |i|
bar << '='
bar2 << '**'
print "#{bar} - #{i+1}0%\r"
#print "#{bar2} - #{i+1}0%\r"
sleep 0.3
end
10 = 在完成之前出现在屏幕的左下方。
我想同时创建两个加载栏。如您所见,我创建了bar2,它在完成之前创建了20 个*。
两者都可以正常工作,但不能同时工作!如果我取消注释两个打印命令,我会打印两个条,只显示 bar2,bar1 根本不显示。
我猜这是因为\r 将“光标”返回到行首,并用bar2 的进度覆盖bar。
我尝试使用\n,但\n 之前的所有文本都不会被擦除。同样,这是因为 \r 是回车,不能在新行之前得到,所以虽然第一个循环实际上运行良好,但 bar 的进度(和 \n)停留在屏幕上,导致这个效果:
> = - 10%
> == - 20%
> === - 30%%
> ==== - 40%0%
> ===== - 50%40%
> ====== - 60% 50%
> ======= - 70%- 60%
> ======== - 80% - 70%
> ========= - 90%* - 80%
> ========== - 100%* - 90%
那么如何创建两个同时加载栏?或者实际上是无限数量的同时加载条?我正在gnome-terminal 进行测试,但我想要一个适用于大多数(如果不是全部)现代终端的解决方案。
【问题讨论】:
-
你可能不得不使用类似ncurses 的东西来处理控制台光标。看起来有人已经做了一些可能接近你想要的东西,multiple_progress_bar。使用 ncurses。