2016-12-10 10 views
6

HID 바코드 스캐너 (키보드를 에뮬레이트)에 대한 evdev를 폴링하는 python 스크립트를 작성했습니다.이 스크립트는 Linux 플랫폼 (Ubuntu)에서 잘 작동합니다. 거기에 기존 Python 스크립트의 마이너 포팅을 허용 evdev에 대한 OS X 파이썬 이에 상응하는 있나요?OSX 용 Python evdev equivalent

Python 사용 경험이 있고 HID 장치 입력 용으로 구성한 경우 사용자 응답에이를 표시하십시오.

+0

답변이 없지만 [this] (http://www.signal11.us/oss/hidapi/) 및 'ioreg -rtn IOHIDKeyboard'명령이 있습니다. – Potatoswatter

+1

https://github.com/apmorton/pyhidapi를 사용해 보셨나요? – pigletfly

답변

2

마지막으로 리눅스 커널에 의존하기 때문에 mac os에는 evdev 포트가 없다고 생각합니다. 당신은 몇 가지 높은 수준의 추상화를 제안 의견에서 사용해야 맥 OS에서 HID에 대한 몇 가지 비즈니스 로직을 구현하려는 경우. 그러나 당신이 낮은 수준에서 evdev을 원한다면, 나는 그렇게 쉬운 방법이라고 생각한다. using the Docker. Mac OS에서 HID 장치에 대한 경험이 없지만 다른 드라이버에서 같은 문제가 해결되었습니다.

4

(설치 가능 : pip install hidapi -이 것은 주석에 링크 된 것과 다르지만 기능면에서는 유사 함)을 사용하여 간단한 테스트를 수행했습니다. 나는 또한 macports에서 hidapi-devel을 설치했지만 포트가 비활성화 된 후에도 계속 작동하므로이 작업이 필요하다고 확신하지는 않습니다. VID를를 사용하는 예를 try.py을 수정하여

는/마이크로 소프트 USB 무선 키보드/마우스 장치의 PID는

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 장치로 숫자가 열거 된 것처럼 보입니다. & 마우스가 다른 것들 사이에 있기 때문에 바코드 스캐너의 경우에는 약간 랜덤 한 것처럼 보입니다. 그것은 꽤 솔직해야합니다.