Python 多行终端更新
简短的问题
在Windows终端上写入和更新一个多行字符串(包含\n
)是否可行或实际?
背景
我查过curses,但它只适用于Unix系统。我看到了一些其他的Windows移植版本,但其中一个竟然把Windows XP当作实验操作系统,这让我有点担心。我希望能把这个功能用在一个主要是终端的应用程序中,用来显示链接状态、消息速率等(注意,有些变种确实有wxPython的图形界面输入)。不过,使用Cygwin并不是理想的选择,我希望能找到只用sys模块的解决办法。
我尝试了以下方法:(注意,我预期这些会失败,但还是希望我错了)
尝试1:更新了字符串,但所有内容都在一行上
sys.stdout.write("\r")
sys.stdout.write("This is a multi-line screen print test")
sys.stdout.write("Line 1")
sys.stdout.write("Line 2")
sys.stdout.flush()
尝试2:没有更新,但打印了所有行
sys.stdout.write("\r")
sys.stdout.write("This is a multi-line screen print test\n")
sys.stdout.write("Line 1 \n")
sys.stdout.write("Line 2\n")
sys.stdout.flush()
2 个回答
0
你可能需要使用 Windows 控制台 API。比如,SetConsoleCursorPosition 这个函数。还有其他人似乎已经为这个 API 实现了 Python 模块,像是 1 和 2。
3
我找到的最接近curses的东西(而且在过去10年里有更新)是Windows控制台驱动。不过,我没有选择这种方法,而是用了一个不那么优雅的方式。
import os
import time
while(1):
time.sleep(.05)
os.system('cls')
print "This is a multi-line screen print test"
print "Line 1"
print "Line 2"