Como posso usar o DBus para criar um cliente e um servidor sem arquivos de configuração do dbus em versões recentes do Ubuntu?

3

Eu quero usar uma ponte entre um webapp de flask e subprocessos python sob python3. Eu não consegui encontrar um exemplo de copiar e colar de um serviço instanciado sem arquivos de configuração para o mesmo.

O motivo para querer fazer isso é para que eu possa ter vários threads / processos e usar um único processo Dbus como um intermediário de sessão entre instâncias de aplicativos para manter o estado do jogo.

Todos os exemplos triviais de Dbus que encontrei incluem apenas demos do python2.x ou versões antigas de qualquer veículo mainloop que você preferir.

    
por RobotHumans 07.01.2016 / 14:11

1 resposta

3

Este exemplo requer:

python3-dbus.mainloop.pyqt5, python3-dbus

Exemplo de servidor:

import signal, sys
signal.signal(signal.SIGINT, signal.SIG_DFL)

from PyQt5.QtCore import *
import math
import dbus
import dbus.service
from dbus.mainloop.pyqt5 import DBusQtMainLoop

class Server(dbus.service.Object):
  def __init__(self):
    busName = dbus.service.BusName('org.documentroot.Fisticuffs', bus = dbus.SessionBus())
    dbus.service.Object.__init__(self, busName, '/Fisticuffs')
    #Insert subprocesses here...

  @dbus.service.method('org.documentroot.Fisticuffs', in_signature = 's', out_signature = 's')
  def move(self, a): return "Move recieved"
  @dbus.service.method('org.documentroot.Fisticuffs', in_signature = 'dd', out_signature = 'd')
  def add(self, a, b): return a+b

DBusQtMainLoop(set_as_default = True)
app = QCoreApplication(sys.argv)
server = Server()
app.exec_()  

Exemplo de cliente:

import dbus

bus = dbus.SessionBus()
server = bus.get_object('org.documentroot.Fisticuffs', '/Fisticuffs')
print('5 and 10 are:')
print(server.add(5, 10, dbus_interface = 'org.documentroot.Fisticuffs'))

Créditos:
Adaptado de aqui para que o pyqt5 ouça Ctl + C
e aqui para atualizar um tutorial sobre como fazer com que um servidor dbus-python seja executado no mainloop do PyQt5 em python3.

    
por RobotHumans 07.01.2016 / 14:16

Tags