Python - 如何在一行上显示更新值而不是向下滚动屏幕

Mar*_*ith 7 scroll python-2.7 python-3.x output

我有一个实时接收值的 python 脚本。我的脚本在接收到值时打印值,当前,每个更新都打印到屏幕上,输出向下滚动,例如

Update 1
Update 2
Update 3
...
Run Code Online (Sandbox Code Playgroud)

是否可以让每个新值覆盖输出屏幕上的先前值,以便这些值不滚动?例如

Update 1
Run Code Online (Sandbox Code Playgroud)

当收到更新 2 时,打印语句会将输出屏幕更新为:

Update 2
Run Code Online (Sandbox Code Playgroud)

等等...

在此先感谢您的指点。

ele*_*han 10

你可以传递end='\r'print()函数。'\r'表示Python 中的回车。以 Python 3 为例:

import time
for i in range(10):
    print('Update %d' % i, end='\r')
    time.sleep(5)
Run Code Online (Sandbox Code Playgroud)

这里time.sleep(5)只是用来强制打印之间的延迟。否则,即使所有内容都被打印然后被覆盖,它也会发生得如此之快,以至于您只能看到最终值'Update 9'。在您的代码中,听起来有些进程正在运行时time.sleep()会出现自然延迟,因此不需要使用。

  • 这在 Linux 环境中不起作用,您需要更新打印语句,如控制台/Linux `print('', end=f'\rUpdate {i}')` 上所示 (2认同)

Bam*_*lur 5

在python 2.7中,print函数不允许有end参数,print 'Update %d\r'也会打印换行符。

这是@elethan 为 python2.7 提供的相同示例。注意它使用sys.stdout输出流:

import sys
import time
output_stream = sys.stdout

for i in xrange(10):
    output_stream.write('Update %s\r' % i)
    output_stream.flush()
    time.sleep(5)
# Optionally add a newline if you want to keep the last update.
output_stream.write('\n')
Run Code Online (Sandbox Code Playgroud)