我正在使用Python的cmd
模块来处理终端输入循环。
我有一个在后台运行的线程,它在收到消息时在终端中输出一些东西。这些消息打破了可视用户输入:
> writing a com
@@@ message generated from a thread and printing during user input @@@
mand
我问了一个相关的问题here,并且基本上被告知避免打破用户输入的一种方法是跟踪用户输入,以便在收到消息时我可以打印消息并重新打印用户输入。当我问这个问题时,我没有使用cmd
模块。
使用cmd
模块时,如何跟踪用户当前输入的内容,以便我可以在之后重新打印?
答案 0 :(得分:0)
我发现了readline
module及其get_line_buffer()
方法。
这是我如何解决它,在我想要在主要阅读用户输入时打印数据的线程中:
import readline
# Save the current buffer
current_buffer = readline.get_line_buffer()
# Print our stuff, note the \r is important to overwrite the current buffer
print("\rladida interruption\nsome more interruption\n")
# Reprint our buffer
print('> ' + current_buffer, end='', flush=True)
以下是一个例子:
$ ./main.py
> help
之后:
$ ./main.py
ladida interruption
some more interruption
> help
注意命令提示符如何干净地向下移动,并且用户当前命令输入到位。光标也处于正确的位置以继续输入,退格也可以正常工作。