Python 3.8:覆盖并清除终端中先前较短的行
Python 3.8: Overwrite and clear previous shorter line in terminal
我正在尝试用比以前更短的打印来覆盖之前打印的终端行。
我查看了文章 Remove and Replace Printed items 并试图弄清楚如何使其适用于较短的印刷品,但如果前一行比新印刷品的文本短,则给定的提示才有效。含义:
print('Test', end='\r')
print('TestTest')
先打印 Test
然后 TestTest
到同一行但是
print('Tessst', end='\r')
print('Test')
首先打印 Tessst
然后 Testst
保留第一次打印的最后两个字符。我还尝试使用 sys.stdout.flush()
(这显然适用于较旧的 Python 版本)和打印选项 flush=True
但它们都不起作用。有没有其他方法可以让它发挥作用?
flush() 只是意味着所有打印的数据都应该写入输出流。它与您要执行的操作无关。
如果您想覆盖当前行,您可以在第二次打印后放置 space 个字符,以清空屏幕上的字符单元格。或者,如果您有像 Xterm 或 VT 模拟器这样的奇特终端,则有一个转义序列会导致该行的其余部分被删除:
print('Tessst', end='\r')
print('Test3[K')
我找到了解决此问题的合适方法。您可以只用 f 字符串的空格填充字符串的末尾。我在问题中陈述的问题的完整代码将是:
print('Tessst', end='\r')
print(f'{"Test" : <10}')
我是这样找到的here
我正在尝试用比以前更短的打印来覆盖之前打印的终端行。 我查看了文章 Remove and Replace Printed items 并试图弄清楚如何使其适用于较短的印刷品,但如果前一行比新印刷品的文本短,则给定的提示才有效。含义:
print('Test', end='\r')
print('TestTest')
先打印 Test
然后 TestTest
到同一行但是
print('Tessst', end='\r')
print('Test')
首先打印 Tessst
然后 Testst
保留第一次打印的最后两个字符。我还尝试使用 sys.stdout.flush()
(这显然适用于较旧的 Python 版本)和打印选项 flush=True
但它们都不起作用。有没有其他方法可以让它发挥作用?
flush() 只是意味着所有打印的数据都应该写入输出流。它与您要执行的操作无关。
如果您想覆盖当前行,您可以在第二次打印后放置 space 个字符,以清空屏幕上的字符单元格。或者,如果您有像 Xterm 或 VT 模拟器这样的奇特终端,则有一个转义序列会导致该行的其余部分被删除:
print('Tessst', end='\r')
print('Test3[K')
我找到了解决此问题的合适方法。您可以只用 f 字符串的空格填充字符串的末尾。我在问题中陈述的问题的完整代码将是:
print('Tessst', end='\r')
print(f'{"Test" : <10}')
我是这样找到的here