2010-05-21 72 views
0

我正在編寫通過控制檯顯示輸出的python chatbot。每半秒它會向服務器請求更新,並回復消息。在控制檯中,我可以看到聊天記錄。Python - 對自定義鍵盤中斷做出反應

這在大多數情況下是足夠的,但是,有時我想中斷正常的工作流程並自己寫自定義聊天答案。我希望能夠按下一個可以切換到「自定義回覆模式」的按鈕(或組合)。什麼是最好的方式來做到這一點,或達到類似的結果?

非常感謝!

回答

1

sys.stdin上使用select.select()將允許您檢查在終端上是否按了一個鍵。

+0

你能舉出select.select()參數的例子嗎?我使用谷歌搜索,我只發現與Windows相關的錯誤(我正在使用UNIX控制檯)。 應該需要哪種參數 - rlist,wlist還是xlist? 謝謝! – flixic 2010-05-21 14:57:56

+0

您從'sys.stdin'中讀取。 – 2010-05-21 15:06:48

+2

太棒了!這個工作得很好: \t DEF heardEnter(): \t \t I,O,E = select.select([sys.stdin],[],[],1) \t \t對於s在I: \t \t \t如果s == sys.stdin: \t \t \t \t輸入= sys.stdin.readline() \t \t \t \t返回TRUE \t \t返回FALSE – flixic 2010-05-21 17:41:00

1

鑑於上一個答案中的註釋,您需要一個非阻塞函數來判斷是否按下了任何按鍵,而不是按下該按鍵時觸發的按鍵。

因此,我會推薦使用您的操作系統上提供的一些終端API。通常這會是curses或win32控制檯API。但是,我在asciimatics中寫了一個通用包裝。 Screen上的get_event()方法應提供獲取鼠標和鍵盤事件的簡單跨平臺方法。要查看它是否是鍵盤事件,請檢查返回事件的類型。如果沒有事件發生,您將得到None的返回碼,但如果它是按下的鍵,則會得到KeyboardEvent