Sesuai dokumen resmi (di bawah antarmuka standar ):
Ada beberapa antarmuka standar yang mungkin berguna di berbagai aplikasi D-Bus.
org.freedesktop.DBus.Introspectable
Antarmuka ini memiliki satu metode:
org.freedesktop.DBus.Introspectable.Introspect (out STRING xml_data)
Instans objek dapat mengimplementasikan Introspect
yang mengembalikan
deskripsi XML objek, termasuk antarmuka (dengan sinyal dan metode), objek di bawahnya di pohon jalur objek, dan propertinya.
Jadi, inilah contoh yang sangat sederhana yang seharusnya membantu Anda memulai. Menggunakan xml.etree.ElementTree
dan 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')
Itu introspeksi secara rekursif org.freedesktop.UPower
mulai dari misalnya /org/freedesktop/UPower
dan mencetak semua jalur objek (nama node):
/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
yang cukup banyak apa yang akan Anda dapatkan jika Anda menggunakan d-feet
(bukan bahwa Anda akan membutuhkannya):
Tentu, Anda dapat dengan mudah mendapatkan path objek melalui command line misalnya dengan 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 / perangkat
/ org / freedesktop / UPower / devices / DisplayDevice
/ org / freedesktop / UPower / devices / battery_BAT0
/ org / freedesktop / UPower / devices / line_power_ADP0
Saya belum qdbus
menginstal tetapi menurut halaman ini
qdbus --system org.freedesktop.UPower
harus menghasilkan hasil yang serupa.