2016-12-10 2 views
6

Я написал скрипт python, который опросит evdev для HID-сканера штрих-кода (эмулирует клавиатуру): скрипт хорошо работает на платформах Linux (Ubuntu). Есть ли эквивалент OS X Python для evdev, который позволил бы незначительный перенос существующего сценария python?Python evdev эквивалент для OSX

Если у вас есть опыт работы с Python и настроили его для ввода устройства HID, укажите это в своем ответе.

+0

Не ответ, но я нашел [это] (http://www.signal11.us/oss/hidapi/) и команду 'ioreg -rtn IOHIDKeyboard'. – Potatoswatter

+1

Вы пробовали https://github.com/apmorton/pyhidapi? – pigletfly

ответ

2

Я думаю, что нет никакого evdev-порта для mac os, потому что последний зависит от ядра linux. Если вы хотите внедрить некоторую бизнес-логику в HID в mac os, вам следует использовать, как в комментариях, предлагается абстракция высокого уровня. Но если вы хотите evdev на низком уровне, я думаю, что это простой способ сделать это using the Docker. У меня нет опыта работы с HID-устройствами на Mac OS, но я решил эту проблему с другим драйвером.

4

Я получил простой тест, используя 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-устройств для клавиатуры &, так что это кажется немного случайным, какой вы получаете, но для сканера штрих-кода это должно быть довольно прямолинейно.

Смежные вопросы