我想动态刷新一些信息(就像进度条一样),我可以使用以下代码
来完成#! /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内容?
答案 0 :(得分:3)
我也有这种情况,我终于有了解决这个问题的想法; D
reprint- A simple module for Python 2/3 to print and refresh multi line output contents in terminal
您只需将output
个实例视为普通dict
或list
(取决于您使用的模式)。当您在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()