Linux下使用Python捕获键盘输入
2015-07-26 12:29
701 查看
在Linux下如何用Python监控键盘记录
evdev 输入事件驱动,为输入子系统提供了一个默认的事件处理方法。其接收来自底层驱动的大多数事件,并使用相应的逻辑对其进行处理。evdev 输入事件驱动从底层接收事件信息,将其反映到 sys 文件系统中,用户程序通过对 sys 文件系统的操作,就能够达到处理事件的能力。
这里使用一个叫做evdev的库进行处理,其原理是用C函数evdev_read()读取/dev/eventX设备中的buffer数组,里面存有input_event类型数据,下面内核上报的事件都会存在这里。
编写以下程序:
其中select的作用是等待dev改变后再运行后面的代码,dev.read()返回的是buffer数组,里面存有input_event类型数据
使用root权限执行程序,通过观察可知。它的code就是输入的键值,它的value就是对应其状态,按下一个键时,它的value为1,松开时value为0。
那么稍微修改一下代码就可以知道输入值和状态了。
这样就实现了能够读取键盘输入的键和其状态的程序了。
假如要同时监控多个键盘输入的话,开多个线程监控就可以了。
思路
在上篇已经说到如何使用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:假如要同时监控多个键盘输入的话,开多个线程监控就可以了。
相关文章推荐
- 如何在CentOS上查看Windows的ntfs分区
- LD_LIBRARY_PATH的使用方法
- linux命令助记
- linux设置程序开机启动
- 使用centos引导内核错误:kernel: pnp 00:0b: can't evaluate _CRS: 8
- 使用centos引导内核错误:kernel: pnp 00:0b: can't evaluate _CRS: 8
- ping通windows下虚拟机上的linux系统
- ping通windows下虚拟机上的linux系统
- 微软将为Azure加入更多的Linux发行版支持
- Linux常用命令大全
- Linux常用命令大全
- linux系统编程:线程同步-条件变量(cond)
- linux exec函数族
- linux通过建模工具Umbrello
- VMware Workstation 里创建CentOS
- CentOS 7 运行级别的切换
- CentOS 7 运行级别的切换
- LINUX C获取文件大小
- Windows连接linux数据库
- Linux多线程与同步