python - 同时输出到终端时保持用户输入的完整性

标签 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,对跨平台兼容性不感兴趣。

最佳答案

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

一种是使用ncurses。有 python 绑定(bind)。使用 ncurses,终端屏幕完全在您的控制之下,您可以随时打印字符。

如果没有ncurses,您就不能在当前行之上进行书写。但是,您可以 做的是打印一个\r 字符并返回到行的开头。

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

\rbar\nfoo

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

关于python - 同时输出到终端时保持用户输入的完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39712754/

相关文章:

python - 在 Django 模板中转换星级评分

python - 根据字符串中的特定逗号有选择地将字符串拆分为元组列表

python - Bootstrap 导航菜单下拉菜单不起作用

python - Python : SyntaxError

c# - 从任务返回而不阻塞 UI 线程

python - 合并共享单元值的 Python 3 DataFrame 行,将另一个值放入逗号分隔的数组中

python - 使用 python 在大型 .txt 中进行二进制搜索(按哈希排序)

c# - 线程导致 GUI 卡住

java - 什么是类级同步。如果该类被一个线程锁定在同一其他线程上,则可以访问该类的其他方法

python-3.x - 使用 Apache Beam Python 为每个窗口编写唯一的 Parquet 文件