Jui*_*icy 5 python multithreading python-3.x output
为了简单起见,假设我正在尝试用 Python 编写命令行双向聊天。我希望用户input()在命令提示符下输入他的消息,但是监听线程可以随时打印消息。默认情况下,这会“破坏”用户的输入。视觉上是这样的:
userB>Stop interuserA wrote:Hey check this out!
rupting me!
Run Code Online (Sandbox Code Playgroud)
我能找到的最接近的是这里的答案,它几乎但不完全是我正在寻找的东西,但它确实向我指出了blessings似乎是我需要的包(尽管我对答案很满意)对于任何软件包,甚至纯 ANSII)。
我想要实现的目标是打印来自用户输入上方的线程的传入输出,以便他的文本不会中断。假设用户正在输入:
userB>Stop inter
Run Code Online (Sandbox Code Playgroud)
突然,一条消息从线程中传入,但我们的用户输入并没有停止:
userA says: Ok I won't interrupt you
userB>Stop inter
Run Code Online (Sandbox Code Playgroud)
print_incoming_message()为了实现这一目标,我的线程理论方法应该是什么样的?
注意:我使用的是 Linux,对跨平台兼容性不感兴趣。
有两种方法可以做到这一点。
一是使用ncurses。有用于此目的的 python 绑定。有了ncurses,终端屏幕就在您的完全控制之下,您可以随时打印字符。
如果没有ncurses,您将无法在当前行上方写入。然而,您可以\r做的是打印一个字符并返回到行的开头。
如果您保存用户的输入(假设他写了foo),并且您想打印bar上面的行,您可以输出:
\rbar\nfoo
Run Code Online (Sandbox Code Playgroud)
这将覆盖当前行,并引入换行符,将用户的输入向下移动。效果类似,但不会像 那样防篡改ncurses。