Отправить аргументы ключевых слов пользователя через dbus Python - PullRequest
0 голосов
/ 25 июня 2019

Я пытался понять, что там происходит, но не смог понять.Может быть, у кого-то есть подсказка или объяснение этому.

Я настроил очень простой сервер 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?

Спасибо за помощь,

Доминик

...