【问题标题】:How to delete character or line from terminal in Python?如何在 Python 中从终端中删除字符或行?
【发布时间】:2021-02-02 05:00:27
【问题描述】:

我想在 Python 中从终端中删除字符或行。

例如,我使用print("Hello World") 打印“Hello World”。然后我使用time.sleep(3) 等待 3 秒。然后我想在终端中删除一个字符,所以终端将是Hello Worl

所以,我想要的结果是:

  1. 当我启动我的程序时,Hello World 会打印出来。
  2. 程序休眠 3 秒。
  3. 然后终端中的文本变为Hello Worl

另外,我从SOwrite = sys.stdout.writewrite("\b") 找到了一些解决方案,但是这会打印出<0x08>

有没有办法删除终端中的字符或行?

我正在使用 Python 3.8 和 Windows 10。谢谢!

【问题讨论】:

  • 这可能取决于您使用的终端模拟器,它只是普通的Windows命令提示符吗?
  • 我使用的是普通的Windows终端, Pycharm终端。

标签: python terminal python-3.8


【解决方案1】:

您可以在打印语句中使用end='\r' 来做到这一点。 \r 使光标停留在同一行,所以你可以覆盖它。

from time import sleep

print("Hello world", end='\r')
sleep(3)
print("Hello worl ")

【讨论】:

  • 这很好用,但是如果我想打印几行并一次擦除它怎么办?在您的代码中,我只能覆盖最后一行。
【解决方案2】:

您应该注意print 函数默认以换行符结尾。要将光标保持在您打印的行尾,您应该在print 函数中使用end 参数:

print("Hello World", end="", flush=True)    # Edited

使用end = ''的原因是为了让打印函数以没有新字符结束,而不是使用默认的换行符。

下一步,你可以使用write = sys.stdout.write,正如你在另一个question中提到的那样,为了避免打印备用字符出现任何问题,你可以确保使用write("\b \b")

完整的代码可以写成如下:

import sys, time 

print("Hello World", end="")

time.sleep(3)
write = sys.stdout.write
write('\b \b')

您也可以使用sys.stdout.write 代替print 函数。据我所知,这两者之间的主要区别之一是print 默认情况下会强制您从新行开始。但是,有了上述解决方案并使用end = '',就不用担心了。

【讨论】:

  • 感谢您的回答,但是当我运行您的代码时,它只会在 3 秒后打印“Hello Worl”。我想要的是在开始时打印“Hello World”,3 秒后,文本应更改为“Hello Worl”。
  • @JayLee 哎呀!这是正确的!您应该使用print("Hello World", end="", flush=True) 以便在终端上打印缓冲的字符串,然后您就可以开始了,代码将按您的预期工作。
猜你喜欢
  • 2022-10-23
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 2019-01-30
  • 2020-03-22
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多