我想在groovy中显示提前%,所以我想写相同的位置,这意味着不要看到:
1%
2%
3%
...
用户将看到相同位置的数字发生变化。 我怎么做? (我正在开窗)
答案 0 :(得分:5)
我经常这样做只是使用没有换行的回车:
printf "%5d\r", loopval
每次循环,打印将在行的开头重新开始。
如果在发生这种情况时打印出任何其他消息,可能会有点麻烦,特别是如果其他消息包含换行符。但这是一个廉价而肮脏的解决方案。
答案 1 :(得分:2)
您可以使用Groovy附带的jline:
(1..5).each {
print "Done $it of 5"
Thread.sleep( 1000 )
print jline.ANSIBuffer.ANSICodes.left( 9999 )
}
只要你的控制台支持ANSI转义序列,那就应该有效......
PS:我使用了9999因为(如the documentation for left中所述)
如果n大于或等于当前光标列,则光标移动到第一列
答案 2 :(得分:2)
对于遇到此问题的任何人 - 我发现使用以下内容是最佳解决方案:
(0..100).each {
print "\r$it%"
}
println()
答案 3 :(得分:1)
(0..100).each {
print "\b"*20+it+"%"
sleep 100
}
我曾经不得不覆盖多行输出 - 我找到的解决方案是
print "\r\n"*80
为了将所有旧内容滚出屏幕 - 这不是一个很好的解决方案,但它适用于Windows shell: - )