Python3下捕获udev事件的示例及GUdev版本适配问题咨询
Python3下捕获udev事件的GUdev正确示例
问题原因
你遇到的TypeError是因为新版本的GUdev GObject绑定中,GUdev.Client的构造函数不再直接接受子系统参数,而是需要通过静态方法new()传入,或者先创建实例再添加感兴趣的子系统。
修正后的代码示例
import gi gi.require_version('Gtk', '3.0') gi.require_version('GUdev', '1.0') from gi.repository import Gtk, GUdev, GLib def on_uevent(client, action, device): # 打印事件核心信息,可按需扩展输出 print(f"动作类型: {action}") if device.get_device_file(): print(f"设备文件路径: {device.get_device_file()}") print(f"设备名称: {device.get_name()}") print(f"所属子系统: {device.get_subsystem()}") print("------------------------") # 方式1:通过new方法直接指定要监听的子系统(示例为block类设备:U盘、硬盘等) client = GUdev.Client.new(['block']) # 方式2:先创建Client实例,再添加多个感兴趣的子系统 # client = GUdev.Client() # client.add_subsystem('block') # client.add_subsystem('usb') # 绑定udev事件回调函数 client.connect('uevent', on_uevent) # 启动GLib主循环持续监听事件 GLib.MainLoop().run()
额外说明
- 若需监听所有类型的udev事件,可传入空列表
GUdev.Client.new([]),但会产生大量无关事件,建议仅监听业务所需子系统。 - 部分设备操作事件(如挂载/卸载)可能需要特殊权限,确保当前用户属于
plugdev或对应权限组。 - 可通过
device对象的方法获取更多设备属性,比如get_property('ID_VENDOR')查看厂商信息、get_property('ID_MODEL')查看设备型号。
内容的提问来源于stack exchange,提问作者jcoppens
相关产品推荐
相关产品推荐

