我在Python中写了一个简单的聊天程序。您只有一个简单的输入()提示(使用readline),该提示符应始终在底部。
partner: hey
you > (stdin)
现在,我在不使用诅咒的情况下尝试了这一点,并且通过定义这两个常数
取得了成功CURSOR_UP_ONE = 'x1b[1A'
ERASE_LINE = 'x1b[2M'
每当收到"合作伙伴"的消息时,我会使用这样的使用:
print(ERASE_LINE + CURSOR_UP_ONE)
print('partner > ' + msg)
print('you > ')
这很好,但是,有一个问题:当我开始以"合作伙伴"的消息来键入时,它会删除该行,包括我键入的内容(那我将无法访问),然后删除的字符显然仍然是输入()返回的一部分。
因此,是否有一种方法可以在没有诅咒的情况下向输入提示下移动或一种方法来缓冲字符中的键入字符以访问,显示和操纵它们?
如果将终端放在原始模式下(使用模块termios
),并在键入时处理所有键,那么您将 new 是否有任何键在打印合作伙伴的消息之前,请缓冲输入。
(另外,如何从合作伙伴那里接收消息(套接字?),您如何从TTY与合作伙伴进行多重输入?)
好吧,我解决了问题。我发现了模块rl
。我这样使用:
import rl.readline as readline
# code
print(ERASE_LINE + CURSOR_UP_ONE)
print('partner > ' + msg)
readline.redisplay(True)
这只是重新播放提示,包括我输入的内容(只是我想要的)。