如何在Python中删除或清除打印的文本。

6

我正在 Jupyterlab 学习 Python。目前,我尝试找到一种清除 Jupyterlab 中打印文本的方法,但是我没有什么好运。

我在网上搜索了几个解决方案,然而,它们无法清除我的控制台中的打印文本,即使其他人报告了位置结果。

我尝试了以下方法:

(1). '\b' 字符

(2) os.system('cls')

(3) sys.stdout.write

但是它们都未能清除打印文本。

print('Hello',end='')
print(5*'\b')
print('how are you?',end='')

输出: 你好 你怎么样?
print('Hello',end='')
for i in range(len('Hello')):
    print('\b',end='')

print('how are you?',end='')

输出结果: 你好,你怎么样?

print('Hey')
import os
if os.name=='nt':
    os.system('cls')
else:
    os.system('clear')
print('how are you?')

输出: 嘿, 你好吗?

import sys, time

def delete_last_line():
    sys.stdout.write('\x1b[1A')
    sys.stdout.write('\x1b[2K')

print("hello")
time.sleep(2)
delete_last_line()
print("how are you")

输出结果:
你好
你怎么样

我想知道这是因为系统或模块已更新,使得方法不再以相同方式工作,或者我的电脑或Jupyterlab存在问题导致失败。

2个回答

7

要注意长度,\r光标会回到行首,但不会覆盖已有文本,而是只会从开头开始覆盖新输入的文本。

print('Hello', end='\r')
# >>> Hello
print('How are you?', end='\r')
# >>> How are you?
print('TEST', end='\r')
# >>> TESTare you?

也许我会建议一个辅助函数:

def echo(string, padding=80):
    padding = " " * (padding - len(string)) if padding else ""
    print(string + padding, end='\r')

echo("Hello")
# >>> Hello
echo("How are you?")
# >>> How are you?
echo("TEST")
# >>> TEST

这个函数相当巧妙。它完美地解决了我的问题。然而,我感到相当震惊的是,没有内置的函数或模块(至少我找不到)来解决这个问题。在大多数应用程序中,清除屏幕上的输出并生成新的输出似乎是一项基本功能。 - Muchdecal

0

我尝试了这种方法并且成功了:

import sys

sys.stdout.write('hello\r')
sys.stdout.flush()
sys.stdout.write('how are you\r')

>>>how are you

你需要使用sys.stdout.write(info + '\r')来输出信息。'\r'表示回到行首而不换行。


它很好地工作了。谢谢。我想知道是否有一种通用方法可以与print()函数一起使用,因为print()是大多数人调用以将文本打印到屏幕上的函数。 - Muchdecal
这比使用 print() 和 \r 要复杂得多。 - Lou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接