2017-12-17 41 views
0
私はポーリングコマンドを使用してい

(グロブ( 'は/ dev/ttyの[A-ZA-Z] *'))一定の間隔で自分のLinux PCに接続されたUSBデバイスを検出するためのpythonで私のアプリケーションのために。自動的に接続されたUSBデバイスを検出する方法はありますか?USB自動検出

+0

'dbus'モジュールを使用できますか? – Pavel

+0

'tty'デバイスホットプラグを監視する' pyudev'コードhttps://stackoverflow.com/a/39885881/1778421 –

答えて

0

ここがスタートです。あなたの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') 
0

これを行うには、通常の方法は、新しい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が存在することを通知して使用する必要があります。あなたは実行する必要がありますb e小さい場合は、udevデーモンは時間がかかりすぎるとそれを強制終了します。

0

私は、libudevを使ってホットプラグされたデバイスを検出するudevモニタオブジェクトを作成することをお勧めします。ここでは、libudevとそのモニタ機能について学ぶための出発点は次のとおりです。

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

あなたがCのコードを記述することなく、その機能を使用できるようにudevをラップすでに良いPythonライブラリがあるかもしれません。