Python调用DBus接口触发UnknownMethod错误求助
问题解决:DBus接口名大小写错误
核心问题
你的Python代码里指定的DBus接口名存在大小写错误:
- 错误写法:
org.freedesktop.Dbus.Properties(小写的b) - 正确写法:
org.freedesktop.DBus.Properties(大写的B)
DBus接口名称严格区分大小写,对比抓包结果就能发现:d-feet请求使用的是大写B的正确接口名,而Python请求里的接口名是小写b,这就是触发UnknownMethod错误的根本原因。
修正后的代码
#!/usr/bin/python3 import dbus bus = dbus.SystemBus() proxy = bus.get_object('org.freedesktop.hostname1','/org/freedesktop/hostname1') # 修正接口名的大小写 interface = dbus.Interface(proxy, 'org.freedesktop.DBus.Properties') print("----------------") hostname = interface.Get('org.freedesktop.hostname1','Hostname') print("The host name is ",hostname)
查询接口可用方法的方式
1. 使用dbus-send命令
在终端执行以下命令,可获取指定对象的所有接口、方法和属性信息:
dbus-send --system --print-reply --dest=org.freedesktop.hostname1 /org/freedesktop/hostname1 org.freedesktop.DBus.Introspectable.Introspect
2. 在Python中调用自省方法
直接通过代码获取对象的自省XML数据,查看所有可用接口和方法:
#!/usr/bin/python3 import dbus bus = dbus.SystemBus() proxy = bus.get_object('org.freedesktop.hostname1','/org/freedesktop/hostname1') introspect_iface = dbus.Interface(proxy, 'org.freedesktop.DBus.Introspectable') xml_data = introspect_iface.Introspect() print(xml_data)
3. 使用D-Feet图形工具
你已经在使用D-Feet,直接选中目标对象,即可直观查看它支持的所有接口、对应方法及属性,快速验证接口正确性。
内容的提问来源于stack exchange,提问作者Pobbel
相关产品推荐
相关产品推荐

