如何使用 Python 就地刷新多行打印?
How to refresh multiple printed lines inplace using Python?
我想了解如何在 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
每一行的值每次都会改变。这有效地为我提供了每条线路的状态更新。
我看到了 another question from 5 years ago 但是在 Python 3+ 打印函数中添加了 end
参数,我希望有一个更简单的解决方案。
如果每次调用print()
都想清屏,让出现打印每次都被覆盖,可以使用clear
在 unix 中或 cls
在 windows 中,例如:
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
此解决方案不适用于 IDLE、Sublime Text、Eclipse 等软件...运行 它在此类软件中的问题是 clear/cls 使用 ANSI 转义序列来清除屏幕。这些命令将诸如“\033[[80;j”之类的字符串写入输出缓冲区。本机命令提示符能够将其解释为清除屏幕的命令,但这些伪终端不知道如何解释它,所以它们最终只是打印小方块,就像打印未知字符一样。
如果您使用的是这种类型的软件,可以使用 print('\n' * 100),这不是最佳解决方案,但总比没有好。
您可以使用 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()
我想了解如何在 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
每一行的值每次都会改变。这有效地为我提供了每条线路的状态更新。
我看到了 another question from 5 years ago 但是在 Python 3+ 打印函数中添加了 end
参数,我希望有一个更简单的解决方案。
如果每次调用print()
都想清屏,让出现打印每次都被覆盖,可以使用clear
在 unix 中或 cls
在 windows 中,例如:
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
此解决方案不适用于 IDLE、Sublime Text、Eclipse 等软件...运行 它在此类软件中的问题是 clear/cls 使用 ANSI 转义序列来清除屏幕。这些命令将诸如“\033[[80;j”之类的字符串写入输出缓冲区。本机命令提示符能够将其解释为清除屏幕的命令,但这些伪终端不知道如何解释它,所以它们最终只是打印小方块,就像打印未知字符一样。
如果您使用的是这种类型的软件,可以使用 print('\n' * 100),这不是最佳解决方案,但总比没有好。
您可以使用 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()