1. 程式人生 > >Linux下使用Python捕獲鍵盤輸入

Linux下使用Python捕獲鍵盤輸入

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/huangxiongbiao/article/details/47063299

在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-8
from evdev import InputDevice
from select import select

def 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:
這裡寫圖片描述

假如要同時監控多個鍵盤輸入的話,開多個執行緒監控就可以了。
---------------------  
作者:AngryBill  
來源:CSDN  
原文:https://blog.csdn.net/huangxiongbiao/article/details/47063299  
版權宣告:本文為博主原創文章,轉載請附上博文連結!