【问题标题】:Python - how do I display an updating value on one line and not scroll down the screenPython - 如何在一行上显示更新值而不向下滚动屏幕
【发布时间】:2017-05-26 09:39:19
【问题描述】:

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

Update 1
Update 2
Update 3
...

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

Update 1

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

Update 2

等等……

提前感谢您的任何指点。

【问题讨论】:

    标签: python-2.7 python-3.x scroll output


    【解决方案1】:

    您可以将end='\r' 传递给print() 函数。 '\r' 代表 Python 中的 carriage return。以 Python 3 为例:

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

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

    【讨论】:

    • 这不适用于 Linux 环境,您需要更新打印语句,如下所示在控制台/Linux print('', end=f'\rUpdate {i}')
    【解决方案2】:

    在python 2.7中,打印函数不允许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')
    

    【讨论】:

      【解决方案3】:

      假设您的代码在write_num 函数中打印更新列表, 您可以拥有一个名为show_updated_list() 的函数。 希望clear() 每次都能解决这个问题:

      def show_updated_list():
          self.clear()
          write_num()
      

      【讨论】:

        猜你喜欢
        • 2016-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多