我试图弄清楚自己在那里发生的事情,但无法弄清楚。也许有人对此有暗示或解释。
我用导出的方法设置了一个非常简单的dbus服务器。看起来很简单,就像这样:
class Listener(dbus.service.Object):
def __init__(self):
self.name = dbus.service.BusName('com.mybusname.connection', dbus.SessionBus())
super().__init__(self.name, '/Listener')
@dbus.service.method('com.mybusname.connection')
def ConnectionCheck(self, argument=None, *args, **kwargs):
print(argument, args, kwargs)
return
现在,如果我尝试调用该函数,它将可以很好地工作:
dbus_type = dbus.SessionBus()
dbuscon = dbus_type.get_object(Bus_Name, '/Listener')
dbuscon.ConnectionCheck('Hello')
Output:
Hello, (), {}
符合预期
但是,如果我尝试命名关键字参数,我将不会获得结果:
dbuscon.ConnectionCheck(argument = 'Hello')
Output:
TypeError: ConnectionCheck() missing 1 required positional argument: 'argument'
如果我也尝试这样做:
dbuscon.ConnectionCheck('Hello', 'some_argument', some_keyword = 'World!')
Output:
Hello (dbus.String('some_argument'),) {}
带有* arg接缝的部分可以正常工作,但是据我所知,关键字参数“ some_keyword”应该存储在** kwargs中。
我不认为我误解了* args和** kwargs的含义,因此dbus可能应该有问题。 因为如果我尝试:
def Function(argument, *args,**kwargs):
print(argument, args, kwargs)
Function('Hello', 'everybody',some_keyword = 'out there!' )
Output:
Hello ('everybody',) {'some_keyword': 'out there!'}
所以对我而言,主要部分是如何通过dbus发送关键字参数,如果我发送给很多(或未定义的参数)参数,如何将它们存储在** kwargs中?
感谢您的帮助,
多米尼克