让我准确描述一下我在问什么。假设python控制台看起来像这样:
line1
line2
line3
line4
line5
...
现在假设你有一个循环,每次迭代打印成3行。通常它会在第一次迭代中打印到line1,line2和line3,然后在第二次迭代中打印到4,5,6,依此类推。我想让它只打印到第1行,第2行和第3行,同时删除之前在这些行中的内容。
原因是我有很多东西需要打印,之前打印的内容不再重要,所以这样我就不会创建大量的行。
编辑:我认为这不是一个重复的问题,因为这里有更多的问题。我认为清除整个控制台是最简单的解决方案。谢谢你的回答!
答案 0 :(得分:1)
实现此目标的最佳方法是使用termcap(terminal capabilities)
curses模块具备您所需的功能:https://docs.python.org/3.5/library/curses.html#module-curses
或者你可以通过直接打印控制字符和序列,以另一个答案的建议,以更黑客的方式做到这一点。
答案 1 :(得分:0)
首先添加"\r"
以替换最后一行。中间不应该有任何新行。
Python2:
>>> print("line1"),;print("\rline2")
line2
Python3:
>>> print("line1", end="");print("\rline2")
line2
"line1"
已被"\rline2"
覆盖。
答案 2 :(得分:0)
你可以使用ANSI escape code" \ 033 [F",它可以在许多终端中使用:
import time
lines = ['line %d' % n for n in range(10)]
reset_after = 3
for number, line in enumerate(lines):
if number > 0 and not number % reset_after:
# if we wrote n lines, we are now on line n+1,
# so we go up n+1 lines
print("\033[F" * (reset_after + 1))
# We must first erase the line where we're about to write,
# in case our new line is shorter.
# "\033[K" erases from the cursor
print("\033[K" + line)
time.sleep(0.5)
在我的Linux终端中完美运行。