在Linux中使用Python获取鼠标增量!
我知道在Linux系统中,/dev/input/mice会输出一个9位的二进制补码数据。我也知道可以通过/dev/hidraw0获取这些数据,hidraw是你的USB设备,它会输出来自HID(人机接口设备)的原始数据。
我明白发送的数据是移动的变化量(位移),而不是具体的位置。顺便提一下,我也可以通过“cat /dev/input/mice”看到一些乱码数据。
我想用Python语言来读取这些数据。我希望能把这些数据以简单的整数形式获取,但这确实很难。真正的问题在于如何读取这些数据。有没有办法读取位数据并进行位运算?(目前我不担心root用户相关的问题,请假设这个脚本是以root身份运行的。)
5 个回答
3
没错,Python可以以二进制的方式读取文件。你只需要在打开文件的时候加上一个 'b'
的标志,比如 open('dev/input/mice', 'rb')
。
Python还支持所有常见的位运算操作,比如位移、取反、按位与、按位或、异或和非等等。
不过,建议你使用一个库来处理这些数据,而不是自己手动去做,这样会更方便。
6
输入系统的数据是以结构体的形式输出的,而不是简单的整数。我觉得鼠标设备已经不再推荐使用了。现在更好的方法是使用事件设备接口,这样可以获取鼠标和其他输入事件。我写了一些代码来实现这个功能,可以参考一下这个Event.py模块,你可以直接使用它,或者在这个基础上进行修改。
20
我现在用的是一台基本的设备,无法访问X或其他东西,所以event.py这个文件不能正常工作。
所以我写了一个更简单的解码代码,用来从“过时的”'/dev/input/mice'中进行解释:
import struct
file = open( "/dev/input/mice", "rb" );
def getMouseEvent():
buf = file.read(3);
button = ord( buf[0] );
bLeft = button & 0x1;
bMiddle = ( button & 0x4 ) > 0;
bRight = ( button & 0x2 ) > 0;
x,y = struct.unpack( "bb", buf[1:] );
print ("L:%d, M: %d, R: %d, x: %d, y: %d\n" % (bLeft,bMiddle,bRight, x, y) );
# return stuffs
while( 1 ):
getMouseEvent();
file.close();