フォローアップの質問です利用可能な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.UPower
egから始めて再帰的にチェックし、/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
(必ずしも必要ではありません):