Python evdev эквивалент для OSX
Я написал скрипт на python, который опрашивает evdev для сканера штрих-кода HID (эмулирует клавиатуру): скрипт хорошо работает на платформах Linux (Ubuntu). Существует ли эквивалент evthon для OS X для evdev, который позволил бы незначительное портирование существующего сценария python?
Если у вас есть опыт работы с Python и вы настроили его для ввода с устройства HID, укажите это в своем ответе.
2 ответа
Я получил простой тест, работающий с использованием Cython-Hidapi (устанавливается как pip install hidapi
- обратите внимание, что это отличается от того, что указано в комментариях, но, похоже, похоже на функцию). Я также установил hidapi-devel
из macports, но я не уверен, что это необходимо, так как он продолжает работать после деактивации порта.
Изменив пример try.py, чтобы использовать VID/PID беспроводного устройства клавиатуры / мыши Microsoft USB следующим образом
from __future__ import print_function
import hid
import time
print("Opening the device")
h = hid.device()
h.open(1118, 2048) # A Microsoft wireless combo keyboard & mouse
print("Manufacturer: %s" % h.get_manufacturer_string())
print("Product: %s" % h.get_product_string())
print("Serial No: %s" % h.get_serial_number_string())
try:
while True:
d = h.read(64)
if d:
print('read: "{}"'.format(d))
finally:
print("Closing the device")
h.close()
И работает с $ sudo python try.py
Мне удалось получить следующий вывод:
Opening the device
Manufacturer: Microsoft
Product: Microsoft® Nano Transceiver v2.0
Serial No: None
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
--8<-- snip lots of repeated lines --8<--
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 21, 0, 0, 0, 0, 0]"
read: "[0, 0, 0, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 22, 0, 0, 0, 0]"
read: "[0, 0, 4, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 0, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 0, 0, 0, 0]"
read: "[0, 0, 4, 9, 7, 0, 0, 0]"
read: "[0, 0, 4, 9, 7, 0, 0, 0]"
read: "[0, 0, 7, 0, 0, 0, 0, 0]"
^CClosing the device
Traceback (most recent call last):
File "try.py", line 17, in <module>
d = h.read(64)
KeyboardInterrupt
Конкретное устройство, которое я использую, похоже, перечисляет как несколько устройств HID для клавиатуры и мыши среди других вещей, так что, кажется, это немного случайно, какое вы получаете, но для сканера штрих-кода это должно быть довольно просто.
Я думаю, что нет порта evdev для Mac OS, потому что последний зависит от ядра Linux. Если вы хотите реализовать некоторую бизнес-логику для HID в Mac OS, вам следует использовать, как в комментариях, предложенную некоторую абстракцию высокого уровня. Но если вы хотите evdev на низком уровне, я думаю, что простой способ сделать это с помощью Docker. У меня нет опыта работы с HID-устройствами на Mac OS, но я решил ту же проблему с другим драйвером.