首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python从pyudev获取设备路径

使用python从pyudev获取设备路径
EN

Stack Overflow用户
提问于 2016-09-19 18:22:53
回答 2查看 2.5K关注 0票数 2

使用pydev和python-2.7,我希望获得连接设备的设备路径。

现在我使用以下代码:

代码语言:javascript
复制
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/devices/pci0000:00/pci0000:00:01.0/0000.000/usb1/1-2')

如何获得像/dev/ttyUSB1这样的路径?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-06 00:57:10

Device(u'/sys/devices/pci0000:00/pci0000:00:01.0/0000.000/usb1/1-2')是一种USB设备(即device.device_type == 'usb_device')。在枚举时,/dev/tty*文件还不存在,因为它稍后在自己的枚举过程中被分配给其子USB接口。因此,您需要为Device(u'/sys/devices/pci0000:00/pci0000:00:01.0/0000.000/usb1/1-2:1.0')等待一个单独的设备添加事件,该事件将具有device.device_type == 'usb_interface'

然后你就可以在它的print [os.path.join('/dev', f) for f in os.listdir(device.sys_path) if f.startswith('tty')]中做device_added()

代码语言:javascript
复制
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()
票数 2
EN

Stack Overflow用户

发布于 2016-10-06 13:34:31

我发现这个解决方案:

代码语言:javascript
复制
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

我知道..。太可怕了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39579727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档