2016-09-26 53 views
0

我使用Python的cmd模塊來處理終端輸入循環。在用戶按下輸入之前跟蹤當前輸入

我有一個線程在後臺運行,當它收到一條消息時,它會在終端打印出一些東西。這些消息打破了視覺用戶輸入:

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

我問一個相關的問題here,並已基本告知,以避免破壞用戶的輸入辦法之一是跟蹤用戶輸入的,所以當消息傳入我可以打印消息並重新打印用戶輸入。當我問這個問題時,我沒有使用cmd模塊。

當使用cmd模塊時,我將如何跟蹤用戶當前輸入的內容,以便我可以重印它?

回答

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 

請注意命令提示符如何幹淨地向下移動,用戶當前命令輸入在pl高手。光標也處於正確的位置繼續打字,退格鍵也可以正常工作。