Python 如何使用“打印”功能清除控制台行 前提
我试图基本上清除控制台行,但不是不使用空格的整个控制台窗口,这样我就不会有上次打印的额外字符。例如:Python 如何使用“打印”功能清除控制台行 前提,python,console,urwid,Python,Console,Urwid,我试图基本上清除控制台行,但不是不使用空格的整个控制台窗口,这样我就不会有上次打印的额外字符。例如: # This causes characters from the last thing printed: print("I don't know you.", end="\r") print("Hello Jim!", end="\r") # Yields the following (without the quotations) --> # "Hello Jim!ow you."
# This causes characters from the last thing printed:
print("I don't know you.", end="\r")
print("Hello Jim!", end="\r")
# Yields the following (without the quotations) -->
# "Hello Jim!ow you."
现在要解决这个问题,我们可以这样做:
导入操作系统
def新_打印(消息,结束):
"""
清除控制台,无论前一行的大小
不换行
"""
控制台的宽度=int(os.popen(“stty size”,“r”).read().split()[1])
# = 17
print(f{message:您可以使用EL(擦除行)。在Python中,构造它的最简单方法是:
"\033[2K"
该编号控制EL序列的行为:
- 0:清除前进直到行结束(默认)
- 1:向后清除,直到线路开始
- 2:清除整条线路
EL序列不会移动光标
这种行为相当标准,但如果您想确定,可以使用tput
查询terminfo数据库
tl;dr:
print("I don't know you.", end="\r")
print("\033[2KHello Jim!", end="\r")
您可以使用EL(擦除行)。在Python中,最简单的构造方法是:
"\033[2K"
该编号控制EL序列的行为:
- 0:清除前进直到行结束(默认)
- 1:向后清除,直到线路开始
- 2:清除整条线路
EL序列不会移动光标
这种行为相当标准,但如果您想确定,可以使用tput
查询terminfo数据库
tl;dr:
print("I don't know you.", end="\r")
print("\033[2KHello Jim!", end="\r")
你可以像下面这样做。为了更好的能见度,我增加了睡眠时间
import time
def myprint(msg):
print(msg, end='', flush=True)
time.sleep(1)
print('\r', end='', flush=True)
print(' ' * len(msg), end='', flush=True)
print('\r', end='', flush=True)
print('These are some other lines 1')
print('These are some other lines 2')
for i in range(10):
myprint('Hello Jim {}!'.format(i))
你可以像下面这样做。为了更好的能见度,我增加了睡眠时间
import time
def myprint(msg):
print(msg, end='', flush=True)
time.sleep(1)
print('\r', end='', flush=True)
print(' ' * len(msg), end='', flush=True)
print('\r', end='', flush=True)
print('These are some other lines 1')
print('These are some other lines 2')
for i in range(10):
myprint('Hello Jim {}!'.format(i))
在第二个print语句中添加end=“\r”
在我的终端上没有显示任何内容。我认为应该是:print(“\033[2KHfasgesgwg],end=”“)
。\r
终端的行为是特定的吗?这是OP的原始代码,我认为他们会继续在同一行上打印是有原因的。但是,如果你只是在终端上执行,提示通常会覆盖你以前的行为。这就像一个符咒,谢谢。为了澄清,是的,我会打印ng在同一行上。在第二个print语句中添加end=“\r”
在我的终端上没有显示任何内容。我认为应该是:print(“\033[2KHfasgesgwg],end=”“)
。\r
终端的行为是特定的吗?这是OP的原始代码,我认为他们会继续在同一行上打印是有原因的。但是,如果你只是在终端上执行,提示通常会覆盖你以前的行为。这就像一个符咒,谢谢。为了澄清,是的,我会打印在同一条线上。