0

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

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

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

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

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

4

1 回答 1

0

我发现了readline模块及其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

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

于 2016-09-27T00:08:16.757 回答