为了简化,我们说我试图在Python中编写命令行双向聊天。我希望用户在命令提示符下使用input()
输入他的消息,但是监听线程可以随时打印消息。默认情况下,这会打破"打破"用户的输入。看起来像这样:
userB>Stop interuserA wrote:Hey check this out!
rupting me!
我能找到的最接近的是this answer here这几乎是,但不完全是我正在寻找的东西,但它确实指向blessings
包似乎是我需要什么(虽然我对任何包装的答案都很满意,甚至是纯粹的ANSII)。
我想要实现的是打印用户输入上方的以上输入的输入,这样他的文字就不会中断。让我们说用户正在输入:
userB>Stop inter
突然收到来自帖子的消息,但是我们用户的输入没有制动:
userA says: Ok I won't interrupt you
userB>Stop inter
我的线程理论print_incoming_message()
方法应该是什么样的?
注意:我使用的是Linux,对跨平台兼容性不感兴趣。
答案 0 :(得分:2)
有两种方法可以做到这一点。
一个是使用ncurses
。这有python绑定。使用ncurses
,终端屏幕完全由您控制,您可以随时打印字符。
如果没有ncurses
,则无法在当前行上方写入。但是,你可以做的是打印一个\r
字符并返回到行的开头。
如果您保存用户的输入(比如他写了foo
),并且您想打印上面的行bar
,则可以输出:
\rbar\nfoo
这将覆盖当前行,并引入换行符,向下移动用户输入。效果类似,但不会像ncurses
那样具有防篡改功能。