2016-09-19 27 views
1

python-2.7でpydevを使用して、接続されているデバイスのデバイスパスを取得します。pyudevからpythonでデバイスパスを取得

今、私はこのコードを使用します

from pyudev.glib import GUDevMonitorObserver as MonitorObserver 

def device_event(observer, action, device): 
    print 'event {0} on device {1}'.format(action, device) 

をしかし、このような文字列を返すdevice

(U '/ SYS /デバイス/ pci0000:00/pci0000:00:01.0/0000.000/usb1/1-2 ')

/dev/ttyUSB1のようなパスを取得するにはどうすればよいですか。

答えて

2

Device(u'/sys/devices/pci0000:00/pci0000:00:01.0/0000.000/usb1/1-2')は、USBデバイス(つまり、device.device_type == 'usb_device')です。その列挙の時点で、子供USBインターフェイスに割り当てられているため、/dev/tty*ファイルはまだ存在しません。したがって、別のデバイスが追加されるのを待つ必要があります。Device(u'/sys/devices/pci0000:00/pci0000:00:01.0/0000.000/usb1/1-2:1.0')イベントはdevice.device_type == 'usb_interface'になります。

それからちょうどそのdevice_added()print [os.path.join('/dev', f) for f in os.listdir(device.sys_path) if f.startswith('tty')]を行うことができます:

import os 
import glib 
import pyudev 
import pyudev.glib 

context = pyudev.Context() 
monitor = pyudev.Monitor.from_netlink(context) 
monitor.filter_by(subsystem='usb') 
observer = pyudev.glib.GUDevMonitorObserver(monitor) 

def device_added(observer, device): 
    if device.device_type == "usb_interface": 
     print device.sys_path, [os.path.join('/dev', f) for f in os.listdir(device.sys_path) if f.startswith('tty')] 

observer.connect('device-added', device_added) 
monitor.start() 

mainloop = glib.MainLoop() 
mainloop.run() 
0

私はこの解決策を見つける:私は知っている

def device_event (observer, action, device): 
    if action == "add": 
     last_dev = os.popen('ls -ltr /dev/ttyUSB* | tail -n 1').read() 
     print "Last device: " + last_dev 

を...恐ろしいです。

関連する問題