dbus-python教程NetworkManager示例运行提示getProperties方法不存在报错
问题解决方案
核心原因
- 教程示例基于旧版本NetworkManager编写,当前版本已弃用
org.freedesktop.NetworkManager.Devices自定义接口,原有的getProperties方法也已被移除 - 网络设备的DBus对象路径规则已调整,不再使用
eth0这类网卡名作为路径后缀,统一使用数字序号 - 普通用户默认没有NetworkManager相关DBus接口的调用权限,未授权时调用会触发权限拒绝错误
修复方法
1. 接口替换
当前DBus服务统一使用org.freedesktop.DBus.Properties标准接口读取对象属性,无需使用服务自定义的属性读取方法。
2. 权限处理
测试阶段可以直接用sudo运行Python脚本验证功能,正式使用时可配置polkit规则对指定用户开放对应接口的访问权限。
可运行示例代码
import dbus bus = dbus.SystemBus() # 路径中的数字1对应网卡的序号,可根据实际情况替换 dev_obj = bus.get_object( 'org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager/Devices/1' ) # 初始化标准属性接口 props_interface = dbus.Interface( dev_obj, dbus_interface='org.freedesktop.DBus.Properties' ) # 读取NetworkManager设备接口的所有属性 dev_props = props_interface.GetAll('org.freedesktop.NetworkManager.Device') # 输出属性验证 print(dev_props)
如果需要读取单个指定属性,可使用如下写法:
# 读取网卡接口名 interface_name = props_interface.Get( 'org.freedesktop.NetworkManager.Device', 'Interface' ) print(interface_name)
内容的提问来源于stack exchange,提问作者Daemon
相关产品推荐
相关产品推荐

