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