Ищем строку в возможностях устройства;evdev;питон - PullRequest
0 голосов
/ 20 февраля 2019

в evdev Я пытаюсь проверить, есть ли подключенная мышь и клавиатура, и если да, назначьте путь устройства для переменной, которая будет использоваться.Это работало некоторое время, так как я только что проверил имя мыши или клавиатуры в имени устройства, используя этот код

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 голосов
/ 20 февраля 2019

Поскольку структура данных, которую вы хотите проанализировать, выглядит следующим образом:

{ 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)),] }

... вы могли бы сделать что-то вроде:

caps = device.capabilities()
key_codes = evdev.ecodes[('EV_KEY', ecodes.EV_KEY)]
has_rmb = 'BTN_RIGHT' in [ kc[0][0] for key_codes ]

... но это много лишнего кода и накладных расходов для обхода бесполезности, которое только в структурах данных дляцели читабельности человека.

...