Python 当有输出时,将仍然缓冲的标准输入线向下移动1

Python 当有输出时,将仍然缓冲的标准输入线向下移动1,python,tty,ansi-escape,Python,Tty,Ansi Escape,我用python编写了一个简单的聊天程序。 您只有一个简单的input()提示符(使用readline),它应该始终位于底部 partner: hey you > (stdin) 现在,我不使用诅咒来尝试这一点,通过定义这两个常量,我获得了成功 CURSOR\u UP\u ONE='\x1b[1A' 擦除_行='\x1b[2M' 每当收到来自“合作伙伴”的消息时,我都会这样使用: 打印(擦除行+光标向上) 打印('合作伙伴>'+消息) 打印('您>') 这很好,但是,有一个问题:当我

我用python编写了一个简单的聊天程序。 您只有一个简单的input()提示符(使用readline),它应该始终位于底部

partner: hey
you > (stdin)
现在,我不使用诅咒来尝试这一点,通过定义这两个常量,我获得了成功

CURSOR\u UP\u ONE='\x1b[1A'
擦除_行='\x1b[2M'
每当收到来自“合作伙伴”的消息时,我都会这样使用:

打印(擦除行+光标向上)
打印('合作伙伴>'+消息)
打印('您>')
这很好,但是,有一个问题:当我开始键入来自“partner”的消息时,它会删除包括我键入的内容(我无法再访问这些内容)在内的行,并且删除的字符显然仍然是input()返回内容的一部分


那么,有没有一种方法可以在不使用诅咒的情况下向下移动输入提示符,或者有没有一种方法可以缓冲键入的字符以便能够访问、显示和操作它们?

如果您将终端置于原始模式(使用模块
termios
),然后在打印合作伙伴的消息之前,您将知道是否存在任何缓冲输入

(还有,您是如何接收来自合作伙伴的消息的(套接字?),以及您是如何将来自TTY的输入与合作伙伴的输入进行多路复用?

好的,我解决了我的问题。 我发现了模块
rl
。我这样使用它:

将rl.readline导入为readline
#代码
打印(删除行+光标向上)
打印('合作伙伴>'+消息)
readline.redisplay(真)

这只是重新显示提示,包括我键入的内容(正是我想要的)。

您可能首先希望避免使用
打印
中的
\n
,而不是在那里使用
cuu1