所以我寫,我運行一個不斷接收/發送消息到運行相同程序的其它計算機程序的項目。保持標準輸入線在終端屏幕的頂部或底部
接收機/數據的發送方是在一個線程並打印到標準輸出運行。 我得到的東西是這樣的:
[INFO] User 'blah' wants to send message to you.
[INFO] some other info
[MSG REC] Message 'hello' received from blah.
現在的問題是,有時我想輸入命令到終端,問題是,當我嘗試輸入命令和新信息的消息或MSG REC
打印到stdout 。我有諸如quit
和status
等
>>表示輸入線的命令。
像這樣的事情可能會發生:
[INFO] User 'blah' wants to send message to you.
[INFO] some other info
[MSG REC] Message 'hello' received from blah.
>> stat[MSG REC] Message 'sup' received from Bob.
us
然後,我會按回車鍵和命令status
得到執行,但在終端看起來那麼差。每2-4秒會出現一條消息,所以這是一個問題。有沒有解決這個問題的好方法?我試圖用ANSI光標指令,試圖在最後一行前插入新行,以便最後一行將始終保持爲輸入線,我可以輸入「統計」,等待一會兒,並用「我們」沒有任何完成它的問題。
我也看到有人推薦curses
,但試圖將其與我的程序集成完全搞亂了我的輸出格式和其他東西(我認爲它的矯枉過正也許)。
那麼,有沒有一種簡單的方法,以使線程插入新MSG REC
線1號線的最後一行的上方,最後一行將永遠留我在輸入與輸入線>>和任何其他。
在Linux上使用Python2.7。
編輯:變化是由詹姆斯·米爾斯回答工作: 我不得不使用這個每當我的線程打印新的生產線。
myY, myX = stdscr.getyx();
str = "blah blah"; #my message I want to print
stdscr.addstr(len(lines), 0, str)
lines.append(str)
stdscr.move(myY, myX) #move cursor back to proper position
我不得不添加'curses.KEY_BACKSPACE'來解決我的機器上退格。 此外,這不工作,因爲我希望它,而我的線程是每秒打印新行(我通過它'stdscr'作爲參數,使行全局),它將光標移動到打印行的結尾,所以什麼我正在輸入的是最後一行的結尾處,而不是在'>>>' – Mohammad
附近的底部。好吧設法修復它,現在它正在按照我的要求工作! 我只是改變了我的線程打印新行的方式,以便在完成打印後將光標移回到正確的位置。 我將變更添加到原始帖子。 – Mohammad
我很高興這有助於你解決你的問題!使用''curses.KEY_BACKSPACE''在我的系統上不起作用:) –