寻找设备功能中的一环; evdev;蟒蛇

时间:2019-02-20 20:16:02

标签: python evdev

在evdev中,我试图检查是否插入了鼠标和键盘,如果是,则将设备路径分配给要使用的变量。这工作了一段时间,因为我刚刚使用此代码在设备名称中检查了名称Mouse或Keyboard

if ("KEYBOARD" in device.name) or ("Keyboard" in device.name):
                    print ("This is a Keyboard")
                    keyboarddir = device.path
                    keyboard = evdev.InputDevice(keyboarddir)

插入另一只鼠标后,我发现他们并没有全部说鼠标在那儿,我想知道是否有一种方法可以将名为“ BTN_RIGHT”的字符串与设备功能进行比较。我输入的无效代码将如下所示。

if ("BTN_RIGHT" in device.capabilities(verbose=True)):
                    print ("this is the mouse")

请帮助我弄清楚如何更容易地检测鼠标,或者实际上能够搜索其功能并将其与其他字符串进行比较!

1 个答案:

答案 0 :(得分:0)

由于要解析的数据结构如下:

from kombu import Exchange, Queue
import os


CELERY_ACCEPT_CONTENT = ['pickle', 'json']
BROKER_URL = 'amqp://guest@localhost'
CELERY_IMPORTS = ('proj.tasks')
CELERY_QUEUES = [Queue('default', Exchange('default', type='direct'), routing_key='default')]

#DJANGO SETTINGS
SECRET_KEY = "YOUR_TOP_SECRET_KEY"

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'djcelery',
'mypp')

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join('/home', 'test.db'),
    }
}

...您可能会做类似的事情(此处不使用{ 1: [272, 273], 3: [0, 1] } ,因为如果我们只使用原始常量,它会更简单):

verbose=True

如果您真的想使用字符串形式(我不建议这样做),则您的数据将如下所示:

caps = device.capabilities()
has_rmb = evdev.ecodes.BTN_RIGHT in caps.get(evdev.ecodes.EV_KEY, [])

...您可能会做类似的事情:

{ ('EV_KEY', 1): [('BTN_MOUSE', 272), ('BTN_RIGHT', 273), ...],
  ('EV_ABS', 3): [(('ABS_X', 0), AbsInfo(min=0, max=15360, fuzz=128, flat=0)),
                  (('ABS_Y', 1), AbsInfo(min=0, max=10240, fuzz=128, flat=0)),] }

...但是,要解决残存问题,这仅是出于人类可读性目的而存在于数据结构中的很多额外代码和开销。