我正在尝试获取Ubuntu 10.10中当前插入的USB设备的列表,并监视发生的变化,例如使用UDev和D-BUS插入或拔出的设备.我是使用D-BUS进行编程的新手.我看到一个例子:Linux:如何检测usb键盘是插入和拔出只有一个人使用HAL我知道HAL已被弃用.我找到了一些工作代码,对它进行了一些修改,只是它不适用于任何设备,只有存储设备,如usb棒,媒体播放器或cd-rom设备.我希望老鼠,键盘,usb相机充电器充满任何插入USB的东西我希望我的程序知道它.这基本上就是我所拥有的(http://moserei.de/2010/01/08/accessing-devicekit-with-dbus-and-python.html):
import dbus
import gobject
from dbus.mainloop.glib import DBusGMainLoop
def device_added_callback(device):
print 'Device %s was added' % (device)
def device_changed_callback(device):
print 'Device %s was changed' % (device)
#must be done before connecting to DBus
DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
proxy = bus.get_object("org.freedesktop.UDisks",
"/org/freedesktop/UDisks")
iface = dbus.Interface(proxy, "org.freedesktop.UDisks.Device")
devices = iface.get_dbus_method('EnumerateDevices')()
print '%s' % (devices)
#addes two signal listeners
iface.connect_to_signal('DeviceAdded', device_added_callback)
iface.connect_to_signal('DeviceChanged', device_changed_callback)
#start the main loop
mainloop = gobject.MainLoop()
mainloop.run()
Run Code Online (Sandbox Code Playgroud)
任何帮助都会被贬低.先谢谢你,Calota Romeo
我正在开发一个项目,在该项目中我必须与连接的设备(ttyS0、ttyS1 或 ttyUSB0)进行一些串行通信。幸运的是,我遇到了一个非常有用的 stackoverflow 链接:“ Simple way to query linked USB devices info in Python? ”。在此链接中,有一个 python 代码,它工作得很好,并且提供了正确的设备名称和详细信息。
示例代码中:“/dev/bus/usb/005/002”是“FT232 Serial (UART)”的设备信息。那么,有没有办法找到 /dev/bus/usb/005/002 与 ttyS0/ ttyUSB0 的映射或使用设备信息直接访问 UART,并使用“/dev/bus/usb/<总线 >/< 设备 >" 而不是 ttyS0 或 ttyUSB0。
蟒蛇代码:
import re
import subprocess
device_re = re.compile("Bus\s+(?P<bus>\d+)\s+Device\s+(?P<device>\d+).+ID\s(?P<id>\w+:\w+)\s(?P<tag>.+)$", re.I)
df = subprocess.check_output("lsusb")
devices = []
for i in df.split('\n'):
if i:
info = device_re.match(i)
if info:
dinfo = info.groupdict()
dinfo['device'] = '/dev/bus/usb/%s/%s' % (dinfo.pop('bus'), dinfo.pop('device'))
devices.append(dinfo)
print devices
Run Code Online (Sandbox Code Playgroud)
结果:
{'device': '/dev/bus/usb/001/001', 'tag': 'Linux Foundation 2.0 root …Run Code Online (Sandbox Code Playgroud)