使用Python监听USB键盘
设置环境:我在一台极简的Linux系统上(在ASUS路由器上运行OpenWRT),连接了一个USB键盘(假设我知道设备名称,比如/dev/hiddev0)。
目标:写一个Python(或者用Shell脚本,反正可以当作Python的代理)脚本,监听这个设备,并根据用户输入执行一些操作。
作为开始,先实现一个功能:把用户输入的字符回显到一个指定名称的文本文件里。
PyUSB看起来有点复杂。我对PySerial还算熟悉,但不确定它是否适合这个任务——当我尝试打开设备时,出现了“serial.serialutil.SerialException: Could not configure port: (22, 'Invalid argument')”的错误。
更新:好吧,简单的解决办法是用“cat /dev/input/event1”。
不过输出的内容真的很难理解——有没有什么提示可以帮助我解读这些内容(作为字符的整数编码)?
再次更新:用hexdump /dev/input/event1要好得多!它为每次按键提供6个9元组(我猜,3个是按下,3个是抬起)。解密这些内容可能不会那么困难。
不过,如果有更简单的方法,那就太好了。
2 个回答
对于以后看到这个问题的朋友们(就像我当初一样):有一个很棒的库是Georgi Valkov为evdev开发的:
http://svn.navi.cx/misc/trunk/python/evdev/evdev.py 这个链接提供了一个很好的解决方案 - 它的输出信息非常详细,并且里面有一个现成的 .poll()
方法,可以用来获取事件。
我遇到的唯一问题是 - readMetadata()
这个方法报了错误 22。然后我把它的调用注释掉,结果就顺利运行了。
其实,我还从 http://autokey.googlecode.com/svn/trunk/src/lib/evdev.py 下载了一个更新的版本。
补充一下:要找到实际的 eventN,
cat /proc/bus/input/devices
然后仔细阅读它。