是否可以打印和更新多于一行?
这适用于一行:
print ("Orders: " + str(OrderCount) + " Operations: " + str(OperationCount), end="\r")
并得到这个:(当然数字更新,因为它在循环中)
Orders: 25 Operations: 300
我试过这个:
print ("Orders: " + str(OrderCount) + "\rOperations: " + str(OperationCount), end="\r\r")
并得到这个:(数字确实更新正确)
Operations: 300
寻找两行更新如下:
Orders: 25
Operations: 300
并不是:
Orders: 23
Operations: 298
Orders: 24
Operations: 299
Orders: 25
Operations: 300
最佳答案
\r
是一个回车,光标移动到行首(第 0 列)。从那里开始,编写更多文本将覆盖之前编写的内容,因此您最终只会看到最后一行(足够长,可以覆盖您之前编写的所有内容)。
您需要 \n
,一个换行符,它移动到下一行(并再次从第 0 列开始):
print("Orders: " + str(OrderCount) + "\nOperations: " + str(OperationCount), end="\n\n")
与其使用 str()
和 +
连接,不如考虑使用带有 str.format()
的字符串模板:print("Orders: {}\nOperations: {}\n".format(OrderCount, OperationCount))
或 formatted string literal :print(f"Orders: {OrderCount}\nOperations: {OperationCount}\n")
如果你想使用 \r
回车更新两行,你可以使用 ANSI control codes ;打印 \x1B[2A
(ESC [ 2 A) 将光标向上移动 2 次,根据需要调整数字。这是否有效取决于 what platform you are supporting 。在我的 Mac 上,以下演示工作并使用随机数更新两行;我使用 ESC [ 0 K 来确保行上的任何剩余字符都被删除:
import random, time
orders = 0
operations = 0
UP = "\x1B[3A"
CLR = "\x1B[0K"
print("\n\n") # set up blank lines so cursor moves work
while True:
orders += random.randrange(1, 3)
operations += random.randrange(2, 10)
print(f"{UP}Orders: {orders}{CLR}\nOperations: {operations}{CLR}\n")
time.sleep(random.uniform(0.5, 2))
演示:您还可以使用 Curses 切换到全终端控件或坚持将所有内容放在一行中。如果您打算走 Curses 路线,请考虑到 Windows 兼容性充其量只是粗略的。
关于Python 3 多行打印更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39455022/