Linux下使用Python捕獲鍵盤輸入

來源:互聯網
上載者:User

標籤: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捕獲鍵盤輸入

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.