Skip to main content
 首页 » 编程设计

python之在python中向dbus对象添加方法

2025年05月04日12虾米哥

我需要使用在运行时决定的方法名称在 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 方法的更新列表。