当有输出时,将静止缓冲的stdin线向下移动1

时间:2016-06-23 19:49:48

标签: python tty ansi-escape

我在python中编写了一个简单的聊天程序。 你只需要一个简单的input()提示符(使用readline),它应该总是在底部。

partner: hey
you > (stdin)

现在,我正在尝试这个而不使用curses,我通过定义这两个常量

取得了成功
CURSOR_UP_ONE = '\x1b[1A'
ERASE_LINE = '\x1b[2M'

每当收到来自“合作伙伴”的消息时,我都会这样使用:

print(ERASE_LINE + CURSOR_UP_ONE)
print('partner > ' + msg)
print('you > ')

这很好用,但是,有一个问题:当我开始输入时,就像来自'partner'的消息一样,它会删除包括我输入的内容(我当时无法访问)以及擦除的字符显然仍然是input()返回的一部分。

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

2 个答案:

答案 0 :(得分:0)

如果您将终端设置为原始模式(使用模块termios),并处理键入的每次击键,那么您将知道是否有任何缓冲输入打印合作伙伴的消息。

(另外,如何从合作伙伴(套接字?)接收消息,以及如何从TTY与合作伙伴多路复用输入?)

答案 1 :(得分:0)

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

import rl.readline as readline

# code

print(ERASE_LINE + CURSOR_UP_ONE)
print('partner > ' + msg)

readline.redisplay(True)

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