Python 3 多行打印更新

标签 python

是否可以打印和更新多于一行?
这适用于一行:

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))
演示:
Animated GIF demonstrating 2 lines updating several times
您还可以使用 Curses 切换到全终端控件或坚持将所有内容放在一行中。如果您打算走 Curses 路线,请考虑到 Windows 兼容性充其量只是粗略的。

关于Python 3 多行打印更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39455022/

相关文章:

python - 在 AWS Elastic Beanstalk 上部署 Python

python - 如何更改问题求解格式以使用 lambda 和/或映射 (Python)

python - 如何在linux中执行python文件

python - 从数据中排除 2 个字符串

python - pyqt 中的进度条未正确更新以读取文件

c++ - 需要帮助使用 C++ 模块扩展 Python 3.2

Python - 通过二进制对象进行 "windowed"迭代?

python - twisted.web 服务器的导入问题

python - 在 Heroku 上,locale.getdefaultlocale() 返回 (None, None),破坏了 Django createsuperuser——如何修复?

使用包装的 Python Flask