Я пытался понять, что там происходит, но не смог понять.Может быть, у кого-то есть подсказка или объяснение этому.
Я настроил очень простой сервер 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?
Спасибо за помощь,
Доминик