ตามเอกสารอย่างเป็นทางการ(ภายใต้อินเตอร์เฟสมาตรฐาน ):
มีอินเทอร์เฟซมาตรฐานบางอย่างที่อาจเป็นประโยชน์สำหรับแอปพลิเคชัน 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 - ระบบ - จุดสุดยอด org.freedesktop.UPower - object-path \
/ org / freedesktop / UPower --recurse | awk '/ ^ * node / {print $ 2}'
/ org / freedesktop / UPower
/ org / freedesktop / UPower / wakeups
/ org / freedesktop / UPower / อุปกรณ์
/ org / freedesktop / UPower / อุปกรณ์ / DisplayDevice
/ org / freedesktop / UPower / อุปกรณ์ / battery_BAT0
/ org / freedesktop / UPower / อุปกรณ์ / line_power_ADP0
ฉันไม่ได้qdbus
ติดตั้ง แต่อ้างอิงจากหน้านี้
qdbus --system org.freedesktop.UPower
ควรให้ผลลัพธ์ที่คล้ายกัน