2016-09-26 13 views
0

私はPythonのcmdモジュールを使用して端末入力ループを処理しています。ユーザ入力前に現在の入力を追跡する

スレッドをバックグラウンドで実行しています。これは、メッセージを受信したときに端末に何かを印刷します。私は、関連する質問hereを尋ねると、基本的にメッセージが入って来たときにように、ユーザーの入力を壊さないようにする一つの方法は、ユーザー入力を追跡することであろうと言われた

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

:これらのメッセージは、視覚的なユーザの入力を破ります私は、メッセージを印刷し、ユーザーの入力を再印刷することができます。その質問に私はcmdモジュールを使用していませんでした。

cmdモジュールを使用している場合、後で再印刷できるように、ユーザーが現在入力している内容をどのように追跡するのですか?

答えて

0

readline moduleとそれがget_line_buffer()の方法を発見しました。ここで

は、私がメインで、ユーザー入力を読んでいる間にデータをプリントアウトしたいスレッドで、私はそれを解決方法は次のとおりです。

$ ./main.py 
> help 

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 
ladida interruption 
some more interruption 

> help 

コマンドプロンプトがきれいに下に移動し、ユーザーの現在のコマンドがplエース。また、カーソルは正しい位置に入力を続けるため、バックスペースもうまく動作します。

関連する問題