आधिकारिक डॉक्स ( मानक इंटरफेस के तहत ) के अनुसार:
कुछ मानक इंटरफेस हैं जो विभिन्न डी-बस अनुप्रयोगों में उपयोगी हो सकते हैं।
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 - सिस्टम --dest org.freedesktop.UPower --object-path \
/ org / freedesktop / UPower --recurse | awk '/ ^ * नोड / {प्रिंट $ 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
एक समान परिणाम का उत्पादन करना चाहिए।