2

実行時に決定されるメソッド名を持つ dbus オブジェクトを Python で作成する必要があります。

私が試したコードは基本的にこれです:

import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
import gobject

DBusGMainLoop(set_as_default=True)
gobject.threads_init()

class greg(dbus.service.Object):
        def __init__(self):
                dbus.service.Object.__init__(self, bus, "/greg")

        @dbus.service.method(
                dbus_interface="com.blah.blah",
                in_signature="",
                out_signature="")
        def dance(self):
                print "*busts a move*"

def func(self):
    pass
func = dbus.service.method(
        dbus_interface="com.blah.blah",
        in_signature="",
        out_signature="")(func)
setattr(greg, "do_nothing", func)

bus = dbus.SystemBus()
busname = dbus.service.BusName("com.blah.blah", bus)
obj = greg()
loop = gobject.MainLoop()
loop.run()

この場合、関数「dance」はインターフェイスで使用できますが、関数「do_nothing」は使用できません。なぜだか分からない?私が達成しようとしていることを行う方法はありますか?

4

2 に答える 2

0

do_nothingメソッドは利用可能であると推測していますが、表示されていませ。やみくもに呼ぼうとしたことはありますか?

目に見えるのはメソッドによって返されるものでIntrospectあり、これは class 属性に依存するため、D-Bus メソッドの更新されたリストを返す_dbus_class_tableように更新する必要があります。Introspect

于 2011-02-17T18:44:46.200 に答える