정기적으로 내 리눅스 PC에 연결된 USB 장치를 감지하기 위해 파이썬에서 폴링 명령 (glob ('/ dev/tty [A-Za-z] *'))을 사용하고 있습니다. 내 신청서. 자동으로 연결된 USB 장치를 감지 할 수있는 방법이 있습니까?리눅스 env에 대한 파이썬의 USB 자동 감지
답변
여기가 시작되었습니다. 당신은 당신의 usb 공급 업체 here을 찾을 수 있습니다. current_list_usb
코드를 작성하여 확인해야 할 시간 간격을 설정하여 새 장치가 연결되었는지 여부를 비교하고 확인할 수 있습니다. USB 모듈을 가져올 때 일부 코드를 사용 :
import usb, usb.core, usb.util, usb.backend.libusb1
...snippet...
# usb.core.find()
# find our device
dev = usb.core.find(idVendor= ...., idProduct= ....)
#dev_1 = usb.util.find_descriptor(cfg, find_all =True)
# was it found?
if dev is None:
raise ValueError('Device not found')
#x = dev.set_configuration()
#print (dev)
#print (help(usb.core))
if usb.core.find(find_all=True, bDeviceClass=7) is None:
raise ValueError('No printer found')
이 작업을 수행하는 일반적인 방법은 새로운 tty
이있는 프로그램을 알려주는 udev
규칙을 만드는 것입니다.
사용자 정의 된 udev 규칙은 다음과 같이 보일 수 있습니다 (의이 /etc/udev/rules.d/50-custom-tty.rules
를 호출하자.
KERNEL=="ttyUSB[0-9]+", RUN+="/usr/bin/my-program"
Here's 쓰기 udev 규칙에 좋은 가이드를이 경우
을, 프로그램 /usr/bin/my-program
때마다 실행됩니다 새로운 ttyUSB
장치가/dev에 생성되면 udev는 방금 연결 한 것을 알려주는 환경 변수를 설정합니다. 그러면 주 프로그램에 새로운 ttyUSB
이 있음을 알릴 수 있고 그것을 사용해야합니다. 너는 ~해야한다. 작은 경우, 그렇지 않으면 udev
데몬은 시간이 오래 걸리면 죽일 것입니다.
libudev를 사용하고 hotplugged 디바이스를 탐지하는 udev 모니터 오브젝트를 생성하는 것이 좋습니다.
이https://www.freedesktop.org/software/systemd/man/libudev.html
당신이 C 코드를 작성하지 않고 기능을 사용할 수 있습니다 udev에 랩 이미 좋은 파이썬 라이브러리가있을 수 있습니다 : 당신이 libudev 및 모니터 기능에 대해 배울 수 여기 출발점이 될 것입니다.
'dbus' 모듈을 사용할 수 있습니까? – Pavel
'tty'장치 핫 플러그를 모니터하는'pyudev' 코드 https://stackoverflow.com/a/39885881/1778421 –