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

如何使用Python在原地刷新多个打印行?,python,python-3.x,printing,stdout,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(statemen

我想了解如何在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
写在/更新/刷新的顶部:

Line 1
Line 2
Line 3
Value = 0
每行的值每次都会更改。这有效地为我提供了每一行的状态更新


然而,我看到在Python 3+打印函数中添加了
end
参数,我希望有一个更简单的解决方案。

如果您想在每次调用
print()
时清除屏幕,那么每次打印都会被覆盖,您可以在unix中使用
clear
,也可以在windows中使用
cls
,例如:

import subprocess
a = 0
while True:
    print(a)
    a += 1
    subprocess.call("clear")

如果我理解正确,您正在寻找这种类型的解决方案:

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
这个解决方案不适用于诸如空闲、升华文本、Eclipse之类的软件。。。在这种类型的软件中运行它的问题是clear/cls使用ANSI转义序列来清除屏幕。这些命令将一个字符串(如“\033[[80;j”)写入输出缓冲区。本机命令提示符可以将其解释为清除屏幕的命令,但这些伪终端不知道如何解释,因此它们只会打印小正方形,就像打印未知字符一样

如果您正在使用这种类型的软件,一次黑客攻击可能是打印('\n'*100),它不是最佳解决方案,但总比没有好。

您可以使用它

#!/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()
!/usr/bin/python3
进口诅咒
从时间上导入睡眠
从随机导入随机
声明=”“”
第{}行
第{}行
第{}行
值={}“”
screen=curses.initscr()
n=0
当n<20时:
screen.clear()
screen.addstr(0,0,statement.format(random(),random(),random(),n))
screen.refresh()
n+=1
睡眠(0.5)
诅咒

不确定您想做什么?请提供一个控制台输出更新示例,希望它现在更清晰,如果不清楚,请告诉我这实际上是一行您要更新的内容?我正在尝试更新语句中的所有行确定,因此您只尝试使用默认的py重新打印已更改的行,动态屏幕刷新thon IDE,这对我的知识来说是不可能的。有一些方法可以伪造它,因为它看起来不会流动。这只有在他在终端中工作时才有效。如果他使用空闲或其他解释器呢?很好的复制粘贴!@TheLazyScripter在使用python多年后,我从未使用过那个空闲的东西,所以我个人并不关心它。另外,OP没有提到这个要求,所以假设他使用了一些真实的tool@BPL我使用Eclipse,但你的方法不起作用。我没有指定它在空闲时不起作用,我是说它只在CMD或其他终端上起作用……这只在他在终端上工作时起作用。如果他在使用空闲或其他终端怎么办解释器?此解决方案不可移植Yes@BPL您的答案更可移植:)尽管注意
os.system
是deprecated@Chris_Rands不推荐使用?我不知道…我没有看到在中标记,但是,你在哪里读到过?@BPL它在文档中说,使用
子流程
模块比使用
os.syst更可取em
,另请参见: