如何动态刷新多行输出

时间:2013-01-13 04:51:14

标签: python

我想动态刷新一些信息(就像进度条一样),我可以使用以下代码

来完成
#! /usr/bin/env python
import sys
import time

print "start the output"
def loop():
    i = 0

    while 1:
        i += 1
        output = "\rFirst_line%s..." % str(i) 
        sys.stdout.write(output)        
        sys.stdout.flush()
        time.sleep(1)
loop()

它只能动态输出single_line信息,当在输出中添加'\ n'时,它无法正常工作。

output = "\rFirst_line%s...\n" % str(i)

任何方式都可以帮助它刷新multi_line内容?

4 个答案:

答案 0 :(得分:3)

我也有这种情况,我终于有了解决这个问题的想法; D

reprint- A simple module for Python 2/3 to print and refresh multi line output contents in terminal

您只需将output个实例视为普通dictlist(取决于您使用的模式)。当您在output实例中修改该内容时,终端中的输出将自动刷新:D

这是一个例子:

from reprint import output
import time
import random

print "start the output"

with output(initial_len=3, interval=0) as output_lines:
    while True:
        output_lines[0] = "First_line  {}...".format(random.randint(1,10))
        output_lines[1] = "Second_line {}...".format(random.randint(1,10))
        output_lines[2] = "Third_line  {}...".format(random.randint(1,10))
        time.sleep(0.5)

答案 1 :(得分:1)

您可以使用curses执行此操作,但这非常重要。

答案 2 :(得分:0)

没有办法独立完成该系统(当说“系统”我不仅指操作系统,还指终端应用程序及其设置),因为没有标准的转义序列可以将光标向上移动。至于与系统相关的方式,它们可能适用于您的配置,但需要有关系统的更多信息。无论如何,通常使用这些功能并不是一个好主意。

P.S。希望您不要将程序的输出重定向到文件。如果重定向到文件,这样的进度指示器会产生可怕的输出。

答案 3 :(得分:-1)

将'\ b'写入控制台:

import sys
import time

print "start the output"
def loop():
    i = 0
    output = "\rFirst_line%s..." % str(0) 
    sys.stdout.write(output)
    while 1:
        sys.stdout.write('\b'*len(output))
        i += 1
        output = "\rFirst_line%s..." % str(i) 
        sys.stdout.write(output)        
        sys.stdout.flush()
        time.sleep(1)
loop()