如何在最新版本的 Ubuntu 上使用 DBus 创建没有 dbus 配置文件的客户端和服务器?

如何在最新版本的 Ubuntu 上使用 DBus 创建没有 dbus 配置文件的客户端和服务器?

我想在 python3 下使用 Flask Web 应用程序和 python 子进程之间的桥梁。我找不到可复制粘贴的、无需配置文件即可实例化的服务示例。

想要这样做的原因是为了我可以拥有多个线程/进程并使用单个 Dbus 进程作为应用程序实例之间的会话代理来保存游戏状态。

我发现的所有简单的 Dbus 示例仅包含 python2.x 演示或您喜欢的任何主循环载体的旧版本。

答案1

此示例需要:

python3-dbus.mainloop.pyqt5, python3-dbus

服务器示例:

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_()  

客户端示例:

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'))

资料来源:
改编自这里让 pyqt5 监听Ctl+C
这里更新有关如何让 dbus-python 服务器在 python3 上的 PyQt5 主循环中运行的教程。

相关内容