2017-12-17 6 views
0

Ich benutze Polling-Befehl (Glob ('/ dev/tty [A-Za-z] *')) in Python zu erkennen USB-Geräte mit meinem Linux-PC in regelmäßigen Abständen verbunden für meine Bewerbung. Gibt es eine Möglichkeit, USB-Geräte automatisch verbunden zu erkennen?usb automatische Erkennung in Python für Linux env

+0

Können Sie das 'dbus' Modul verwenden? – Pavel

+0

'Pyudev'-Code zu überwachen' tty' Gerät Hot-Plug https://Stackoverflow.com/a/39885881/1778421 –

Antwort

0

Hier ist ein Anfang. Sie können Ihren USB-Händler here finden. Sie müssen sich selbst eine current_list_usb codieren, stellen Sie ein Zeitintervall ein, um zu überprüfen, so dass Sie vergleichen können, ob ein neues Gerät angeschlossen ist oder nicht. Einiger Code zu verwenden, wenn USB-Modul importieren:

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') 
0

Der normale Weg, dies zu tun, ist eine udev Regel zu machen, dass Ihr Programm sagt eine neues tty existiert.

Eine benutzerdefinierte udev-Regel wie folgt aussehen kann (wir es /etc/udev/rules.d/50-custom-tty.rules nennen.

KERNEL=="ttyUSB[0-9]+", RUN+="/usr/bin/my-program" 

Here's eine gute Anleitung zum Schreiben von udev-Regeln

In diesem Fall wird das Programm /usr/bin/my-program wird ausgeführt, wenn ein new ttyUSB Gerät wird in/dev erstellt, udev wird eine Reihe von Umgebungsvariablen setzen, um Ihnen genau zu sagen, was gerade angeschlossen wurde. Sie können dann Ihr Hauptprogramm benachrichtigen, dass ein neues ttyUSB existiert, und es sollte es verwenden du rennst sollte b e klein, da sonst der udev-Daemon es abbricht, wenn es zu lange dauert.

0

Ich würde vorschlagen, libudev zu verwenden und ein udev-Monitorobjekt zu erstellen, um Hotplugged-Geräte zu erkennen. Hier ist ein Ausgangspunkt für Sie libudev und seinen Monitor-Funktion erfahren:

https://www.freedesktop.org/software/systemd/man/libudev.html

Es könnte eine gute Python-Bibliothek schon sein, dass udev wickelt, so dass Sie seine Funktionen ohne das Schreiben von C-Code verwenden können.