標籤:python 事件處理 linux 鍵盤 input
在Linux下如何用Python監控鍵盤記錄
思路
在上篇已經說到如何使用Python擷取/dev/input目錄下event對應的裝置的名字。那麼我們可以知道裝置的名字,就可以通過名字知道哪些event對應的是鍵盤(可能不只一個鍵盤)。然後在/dev/input/下的對應的event就是負責處理鍵盤輸入的資料的event。
evdev 輸入事件驅動,為輸入子系統提供了一個預設的事件處理方法。其接收來自底層驅動的大多數事件,並使用相應的邏輯對其進行處理。evdev 輸入事件驅動從底層接收事件資訊,將其反映到 sys 檔案系統中,使用者程式通過對 sys 檔案系統的操作,就能夠達到處理事件的能力。
這裡使用一個叫做evdev的庫進行處理,其原理是用C函數evdev_read()讀取/dev/eventX裝置中的buffer數組,裡面存有input_event類型資料,下面核心上報的事件都會存在這裡。
編寫以下程式:
#!/usr/bin/env python#coding: utf-8from evdev import InputDevicefrom select import selectdef detectInputKey(): dev = InputDevice(‘/dev/input/event4‘) while True: select([dev], [], []) for event in dev.read(): print "code:%s value:%s" % (event.code, event.value)if __name__ == ‘__main__‘: detectInputKey()
其中select的作用是等待dev改變後再運行後面的代碼,dev.read()返回的是buffer數組,裡面存有input_event類型資料
使用root許可權執行程式,通過觀察可知。它的code就是輸入的索引值,它的value就是對應其狀態,按下一個鍵時,它的value為1,鬆開時value為0。
那麼稍微修改一下代碼就可以知道輸入值和狀態了。
代碼
def detectInputKey(): dev = InputDevice(‘/dev/input/event4‘) while True: select([dev], [], []) for event in dev.read(): if (event.value == 1 or event.value == 0) and event.code != 0: print "Key: %s Status: %s" % (event.code, "pressed" if event.value else "release")
這樣就實現了能夠讀取鍵盤輸入的鍵和其狀態的程式了。
效果
執行程式,依次按下zxc:
假如要同時監控多個鍵盤輸入的話,開多個線程監控就可以了。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Linux下使用Python捕獲鍵盤輸入