Selon les documents officiels (sous les interfaces standard ):
Il existe certaines interfaces standard qui peuvent être utiles dans diverses applications D-Bus.
org.freedesktop.DBus.Introspectable
Cette interface a une méthode:
org.freedesktop.DBus.Introspectable.Introspect (out STRING xml_data)
Les instances d'objets peuvent implémenter Introspectqui renvoie une
description XML de l'objet, y compris ses interfaces (avec des signaux et des méthodes), les objets situés en dessous dans l'arborescence du chemin d'objet et ses propriétés.
Voici donc un exemple très simpliste qui devrait vous aider à démarrer. Il utilise xml.etree.ElementTreeet 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')
Il introspecte récursivement à org.freedesktop.UPowerpartir de par exemple/org/freedesktop/UPower et imprime tous les chemins d'objet (noms de noeud):
/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
ce qui est à peu près ce que vous obtiendriez si vous l'utilisiez d-feet(pas que vous en auriez besoin):

Bien sûr, vous pouvez facilement obtenir les chemins des objets via la ligne de commande, par exemple avec gdbus :
gdbus introspect --system --dest org.freedesktop.UPower --object-path \
/ org / freedesktop / UPower --recurse | awk '/ ^ * node / {print $ 2}'
/ org / freedesktop / UPower
/ org / freedesktop / UPower / Wakeups
/ org / freedesktop / UPower / appareils
/ org / freedesktop / UPower / devices / DisplayDevice
/ org / freedesktop / UPower / devices / battery_BAT0
/ org / freedesktop / UPower / devices / line_power_ADP0
Je n'ai pas qdbusinstallé mais selon cette page
qdbus --system org.freedesktop.UPower
devrait produire un résultat similaire.