如何使用“print”函数清除控制台行

Cla*_*rts 1 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."
Run Code Online (Sandbox Code Playgroud)

现在要解决这个问题可以这样做:

# 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."
Run Code Online (Sandbox Code Playgroud)

问题

我如何

  1. 只是打印出来"Hello Jim!"而不是"Hello Jim! "(两者显然都没有引号)
  2. 清除该行
  3. 虽然没有清除整个控制台(这样我就可以输出除最后一行之外的其他内容)

具体来说,当改变尺寸时(例如控制台宽度从 17 到 30),控制台中会发生类似的情况,在我的情况下,这种情况经常发生:

Hello Jim!       Hello Jim!   
    Hello Jim!       Hello Jim
!       Hello Jim!       Hello
 Jim!       Hello Jim!       H
ello Jim!       Hello Jim!    

Run Code Online (Sandbox Code Playgroud)

我对一种全新的做事方式持开放态度,比如使用urwid或类似的东西。

Ama*_*dan 6

您可以使用 EL(擦除线)控制序列。在Python中,最简单的构建方法是:

"\033[2K"
Run Code Online (Sandbox Code Playgroud)

该数字控制 EL 序列的行为:

  • 0:向前清除直到行尾(默认)
  • 1:向后清除直到行首
  • 2:清除整行

EL 序列不移动光标。

此行为相当标准,但如果您想确定,可以使用 查询 terminfo 数据库tput

长话短说:

print("I don't know you.", end="\r")
print("\033[2KHello Jim!", end="\r")
Run Code Online (Sandbox Code Playgroud)