小能豆

如何将先前的打印覆盖到标准输出?

javascript

如果我有以下代码:

for x in range(10):
     print(x)

我会得到输出

1
2
etc..

我想要做的是,不是打印换行符,而是替换先前的值并用同一行上的新值覆盖它。


阅读 45

收藏
2024-06-29

共1个答案

小能豆

简易版

一种方法是使用回车'\r'符 ( ) 返回到行首而不前进到下一行。

Python 3

for x in range(10):
    print(x, end='\r')
print()

Python 2.7 向前兼容

from __future__ import print_function
for x in range(10):
    print(x, end='\r')
print()

Python 2.7

for x in range(10):
    print '{}\r'.format(x),
print

Python 2.0-2.6

for x in range(10):
    print '{0}\r'.format(x),
print

在后两种情况下(仅限 Python 2),print 语句末尾的逗号指示不要转到下一行。最后一个 print 语句前进到下一行,因此提示不会覆盖最终输出。

管线清洁

如果您不能保证新行文本不短于现有行,那么您只需添加“清除到行尾”转义序列'\x1b[1K''\x1b'= ESC):

for x in range(75):
    print('*' * (75 - x), x, end='\x1b[1K\r')
print()

长线换行

所有这些方法都假设您输入的内容不超过行的长度。回车符只会返回到当前行的开头,因此如果您的输出超过一行,您只会删除最后一行。

如果这个问题严重到需要控制,您可以禁用换行功能,以防止光标换行到下一行。(相反,光标会停留在行尾,并且连续的字符会覆盖。)

使用 禁用换行,print('\x1b[7l', end='')使用 重新启用换行print('\x1b[7h', end='')请注意,任何时候都不会自动重新启用换行:如果程序因异常而终止,请不要让终端处于中断状态!

2024-06-29