Python 多行终端更新

0 投票
2 回答
2568 浏览
提问于 2025-04-16 23:57

简短的问题
在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 模块,像是 12

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" 

撰写回答