2016-06-23 3 views
2

私はPythonで簡単なチャットプログラムを書いています。 あなたはちょうど底にあるべきである単純なinput()プロンプト(readlineを使って)を持っています。今出力があるときに、まだバッファリングされたstdin行を1つ下に移動します。

partner: hey 
you > (stdin) 

、私は呪いを使用せずにこれをしようとしていると私は、これら2つの定数「パートナー」からのメッセージが受信されるたびに、私はこのように使用

CURSOR_UP_ONE = '\x1b[1A' 
ERASE_LINE = '\x1b[2M' 

を定義することで成功を収めている。

print(ERASE_LINE + CURSOR_UP_ONE) 
print('partner > ' + msg) 
print('you > ') 

これはうまくいきますが、問題が1つあります。「パートナー」からのメッセージが入力されたときに入力を開始すると、入力した行を消去しますcess)、消去された文字は明らかにinput()が返すものの一部です。

だから、cursesや入力された文字をバッファリングしてアクセス、表示、操作できるようにするには、入力プロンプトを下に移動する方法がありますか?

+0

'cuu1'を使うのではなく、最初に' print'から '\ n'を避けたいと思うでしょう。 – o11c

答えて

0

[OK]を、私は私の問題を解決しました。 モジュールrlを発見しました。私は、このようにそれを使用します。

import rl.readline as readline 

# code 

print(ERASE_LINE + CURSOR_UP_ONE) 
print('partner > ' + msg) 

readline.redisplay(True) 

これはちょうど私が(私が望んでいただけで何)入力した内容を含むプロンプトを再表示します。

0

あなたは(モジュールtermiosを使用して)rawモードでターミナルを入れて、それがタイプだとして、すべてのキーストロークを処理した場合は、あなたは相手のメッセージを印刷する前に、任意のバッファされた入力があるかどうかをを知っています。

(また、どのようにソケット(相手からメッセージを受信して​​いる?)とどのようにパートナー対TTYからの多重入力されている?)

関連する問題