在用户按下回车之前跟踪当前输入

Keeping track of current input before user presses enter

我正在使用 Python 的 cmd 模块来处理终端输入循环。

我在后台有一个线程 运行,当它收到一条消息时,它会在终端打印一些东西。这些消息破坏了视觉用户输入:

> writing a com
@@@ message generated from a thread and printing during user input @@@
mand

我问了一个相关问题 并且基本上被告知避免破坏用户输入的一种方法是跟踪用户输入,这样当收到消息时我可以打印消息并重印用户输入。当我问这个问题时,我没有使用 cmd 模块。

使用 cmd 模块时,我如何跟踪用户当前输入的内容,以便我可以在之后重新打印?

我发现了 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

请注意命令提示符是如何干净利落地向下移动的,用户当前的命令输入就位。光标也位于正确的位置以继续输入,退格键也可以正常工作。