10

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

#! /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()

它只能动态输出单行信息,当在输出中添加'\n'时,它不能按预期工作。

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

有什么办法可以帮助它刷新多行内容?

4

4 回答 4

6

我也遇到过这种情况,终于有办法解决了;D

reprint- Python 2/3 的一个简单模块,用于在终端中打印和刷新多行输出内容

您可以简单地将该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)
于 2016-11-10T15:40:39.137 回答
1

You could do it with curses, but it's nontrivial.

于 2013-01-13T08:24:07.810 回答
0

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

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

于 2013-01-13T08:17:58.280 回答
-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()
于 2013-01-13T04:55:34.997 回答