Согласно официальным документам (под стандартными интерфейсами ):
Есть несколько стандартных интерфейсов, которые могут быть полезны для различных приложений D-Bus.
org.freedesktop.DBus.Introspectable
Этот интерфейс имеет один метод:
org.freedesktop.DBus.Introspectable.Introspect (out STRING xml_data)
Могут быть реализованы экземпляры объектов, Introspect
которые возвращают XML-
описание объекта, включая его интерфейсы (с сигналами и методами), объекты под ним в дереве пути объекта и его свойства.
Итак, вот очень упрощенный пример, с которого стоит начать. Он использует xml.etree.ElementTree
и dbus
:
#!/usr/bin/env python
import dbus
from xml.etree import ElementTree
def rec_intro(bus, service, object_path):
print(object_path)
obj = bus.get_object(service, object_path)
iface = dbus.Interface(obj, 'org.freedesktop.DBus.Introspectable')
xml_string = iface.Introspect()
for child in ElementTree.fromstring(xml_string):
if child.tag == 'node':
if object_path == '/':
object_path = ''
new_path = '/'.join((object_path, child.attrib['name']))
rec_intro(bus, service, new_path)
bus = dbus.SystemBus()
rec_intro(bus, 'org.freedesktop.UPower', '/org/freedesktop/UPower')
Он рекурсивно анализирует, org.freedesktop.UPower
начиная, например, /org/freedesktop/UPower
и печатает все пути объектов (имена узлов):
/org/freedesktop/UPower
/org/freedesktop/UPower/Wakeups
/org/freedesktop/UPower/devices
/org/freedesktop/UPower/devices/DisplayDevice
/org/freedesktop/UPower/devices/battery_BAT0
/org/freedesktop/UPower/devices/line_power_ADP0
который в значительной степени то , что вы получите , если вы использовали d-feet
(не то, что вам нужно это):
Конечно, вы можете легко получить пути к объектам через командную строку, например gdbus
:
gdbus introspect --system --dest org.freedesktop.UPower --object-path \
/ org / freedesktop / UPower --recurse | awk '/ ^ * node / {print $ 2}'
/ Орг / Freedesktop / UPower
/ Орг / Freedesktop / UPower / пробуждения
/ орг / Freedesktop / UPower / устройства
/ Орг / Freedesktop / UPower / устройства / DisplayDevice
/ Орг / Freedesktop / UPower / устройства / battery_BAT0
/ Орг / Freedesktop / UPower / устройства / line_power_ADP0
Я не qdbus
установил, но в соответствии с этой страницей
qdbus --system org.freedesktop.UPower
должен дать аналогичный результат.