如何使用Python刷新多个打印行?

时间:2016-08-29 12:10:21

标签: python python-3.x printing stdout

我想了解如何在Python 3.5中重新打印多行。

这是一个脚本示例,我想在其中刷新打印的语句。

import random
import time

a = 0
while True:
    statement = """
    Line {}
    Line {}
    Line {}
    Value = {}
    """.format(random.random(), random.random(), random.random(), a)
    print(statement, end='\r')
    time.sleep(1)
    a += 1

我想做的是:

Line 1
Line 2
Line 3
Value = 1

写在/ update / refresh:

之上
Line 1
Line 2
Line 3
Value = 0

每行的值每次都会改变。这有效地为我提供了每条线的状态更新。

我看到another question from 5 years ago但是在Python 3+打印函数中添加了end参数,我希望有一个更简单的解决方案。

3 个答案:

答案 0 :(得分:2)

如果我理解正确你正在寻找这种解决方案:

import random
import time
import os


def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')

a = 0
while True:
    clear_screen()

    statement = """
    Line {}
    Line {}
    Line {}
    Value = {}
    """.format(random.random(), random.random(), random.random(), a)
    print(statement, end='\r')
    time.sleep(1)
    a += 1

此解决方案不适用于某些软件,如IDLE,Sublime Text,Eclipse ......在此类软件中运行它的问题是clear / cls使用ANSI转义序列来清除屏幕。这些命令将诸如“\ 033 [[80; j”]的字符串写入输出缓冲区。本机命令提示符能够将其解释为清除屏幕的命令,但这些伪终端不知道如何解释它,因此它们最终打印小方块,就像打印未知字符一样。

如果你正在使用这种类型的软件,那么一个黑客就可以进行打印('\ n'* 100),它不是最佳解决方案,但它总比没有好。

答案 1 :(得分:1)

如果您想在每次拨打print()时清除屏幕,以便显示,每次都会覆盖打印件,您可以在unix中使用clear或{在Windows中{1}},例如:

cls

答案 2 :(得分:1)

您可以使用curses

#!/usr/bin/python3

import curses
from time import sleep
from random import random

statement = """
Line {}
Line {}
Line {}
Value = {}"""

screen = curses.initscr()
n = 0

while n < 20:
    screen.clear()
    screen.addstr(0, 0, statement.format(random(), random(), random(), n))
    screen.refresh()
    n += 1
    sleep(0.5)

curses.endwin()