在同时输出到终端时保持用户的输入完好无损

时间:2016-09-26 21:31:44

标签: python multithreading python-3.x output

为了简化,我们说我试图在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,对跨平台兼容性不感兴趣。

1 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点。

一个是使用ncurses。这有python绑定。使用ncurses,终端屏幕完全由您控制,您可以随时打印字符。

如果没有ncurses,则无法在当前行上方写入。但是,你可以做的是打印一个\r字符并返回到行的开头。

如果您保存用户的输入(比如他写了foo),并且您想打印上面的行bar,则可以输出:

\rbar\nfoo

这将覆盖当前行,并引入换行符,向下移动用户输入。效果类似,但不会像ncurses那样具有防篡改功能。