2013-03-09 108 views
0

在python socket編程中,例如聊天,主要目標是不斷接收他人的消息,當接收到他按下任何按鍵時,程序應該接受輸入併發送該消息而不是打印接收到的消息。發送完成後,應打印收到的消息。如何在不明確要求用戶鍵入消息的情況下執行此操作?鍵盤中斷 - PYTHON

謝謝。

回答

1

如果我正確理解你的問題,你會想要使用某種形式的事件系統。將輸入文本和接收消息視爲事件。

http://en.wikipedia.org/wiki/Event_(computing)

Event system in Python

因爲這樣的事情是一個實時的程序,你的程序會在一個循環中運行。在整個循環中,事件被放到一個隊列中,並且在每個循環的開始,它們按照它們被觸發的順序處理。

既然你正在使用網絡,也許一些線程是有用的。由於全局解釋器鎖定,Python不能真正使用多線程來提高性能,但它對於在後面進行I/O操作仍然有用。這樣,當您的聊天客戶端(使用您的示例)嘗試獲取其他人發送的消息時,程序的其餘部分不會凍結。這對緩慢的互聯網連接尤其有利。

+0

感謝您的回覆,是否有任何內置函數來檢查鍵是否被按下? – kanchan 2013-03-09 21:03:33

+0

但我不知道如何聽其他東西的同時聽鍵盤?我有一些python多線程的經驗。你能否詳細說明如何聽鍵盤? – kanchan 2013-03-09 21:18:39

+0

這取決於你想要去的圖書館。我很喜歡Pygame的事件系統。 http://pygame.org/docs/ref/event.html每次您對事件進行輪詢時,您都可以查看它們中的任何一個是否屬於「pygame.KEYDOWN」類型,如果這樣做,那麼您可以獲得鍵與'the_event_object.key'。用'pygame.Event()'製作你自己的事件,並通過將它們傳遞給'pygame.event.post'來觸發它們。事件本身通常不具有方法,相反,您應該製作一些注意某些類型事件(稱爲偵聽器)存在的內容,然後在必要時對其執行操作。 – JesseTG 2013-03-09 21:29:50