通过dbus Python发送用户关键字参数

时间:2019-06-25 14:33:43

标签: python dbus keyword-argument

我试图弄清楚自己在那里发生的事情,但无法弄清楚。也许有人对此有暗示或解释。

我用导出的方法设置了一个非常简单的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中?

感谢您的帮助,

多米尼克

0 个答案:

没有答案