dbusサービスですべてのオブジェクトパスを一覧表示するには?

dbusサービスですべてのオブジェクトパスを一覧表示するには?

フォローアップの質問です利用可能なDBusサービスのリスト

次のPythonコードは、利用可能なすべてのDBusサービスを一覧表示します。

import dbus
for service in dbus.SystemBus().list_names():
    print(service)

Pythonのサービスの下にオブジェクトパスをどのようにリストできますか?答えにPythonが含まれていなくても大丈夫ですが、好みです。

Ubuntu 14.04を使用しています

ベストアンサー1

QT設定は、次の最も便利な方法を提供しますqdbus

qdbus --system org.freedesktop.UPower

印刷

/
/org
/org/freedesktop
/org/freedesktop/UPower
/org/freedesktop/UPower/Wakeups
/org/freedesktop/UPower/devices
/org/freedesktop/UPower/devices/line_power_ADP0
/org/freedesktop/UPower/devices/DisplayDevice
/org/freedesktop/UPower/devices/battery_BAT0

Python方式について...公式によると文書(下に標準インターフェース):

さまざまなD-Busアプリケーションに役立ついくつかの標準インターフェイスがあります。

org.freedesktop.DBus.Introspectable

このインターフェイスには、次の 1 つのメソッドがあります。

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.UPoweregから始めて再帰的にチェックし、/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(必ずしも必要ではありません):

ここに画像の説明を入力してください。

おすすめ記事