You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:20:58