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

时间:2016-09-26 23:05:52

标签: python-3.x python-cmd

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

我有一个在后台运行的线程,它在收到消息时在终端中输出一些东西。这些消息打破了可视用户输入:

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

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

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

1 个答案:

答案 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

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