为简化起见,假设我正在尝试用 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,对跨平台兼容性不感兴趣。
最佳答案
有两种方法可以做到这一点。
一种是使用ncurses
。有 python 绑定(bind)。使用 ncurses
,终端屏幕完全在您的控制之下,您可以随时打印字符。
如果没有ncurses
,您就不能在当前行之上进行书写。但是,您可以 做的是打印一个\r
字符并返回到行的开头。
如果你保存了用户的输入(假设他写了foo
),并且你想打印上面的行bar
,你可以输出:
\rbar\nfoo
这将覆盖当前行,并引入一个换行符,将用户的输入向下移动。效果类似,但不会像ncurses
那样防篡改。
关于python - 同时输出到终端时保持用户输入的完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39712754/