我想了解如何在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
参数,我希望有一个更简单的解决方案。
答案 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()