我需要使用在运行时决定的方法名称在 python 中创建一个 dbus 对象。
我试过的代码基本上是这样的:
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”不可用。我不明白为什么?有什么方法可以实现我想要实现的目标吗?
请您参考如下方法:
我猜测do_nothing 方法可用,但不可见。你试过盲称吗?
可见 是 Introspect 方法返回的内容,它又取决于 _dbus_class_table 类属性,因此您需要更新以让 Introspect 返回 D-Bus 方法的更新列表。
