【发布时间】:2016-01-30 10:55:08
【问题描述】:
这是DBus服务的标准示例。
import dbus
import gobject
from dbus import service
# from gi._gobject import MainLoop
from dbus.mainloop.glib import DBusGMainLoop
class DBusServer(service.Object):
def __init__(self, name, object_path):
# super(service.Object, self).__init__(name, object_path)
dbus.service.Object.__init__(self, name, object_path)
@dbus.service.method("com.test", in_signature='s', out_signature="s")
def test(self, args):
return args + " Sent by dbus client"
@dbus.service.method("com.test", in_signature='s', out_signature="s")
def foo(self, args):
return "foo"
bus_loop = DBusGMainLoop(set_as_default=True)
session_bus = dbus.SessionBus()
session_name = service.BusName("com.test", session_bus)
dbus_server = DBusServer(session_name, "/test")
loop = gobject.MainLoop()
try:
loop.run()
except KeyboardInterrupt:
loop.quit()
我对这里使用的两个主循环有疑问
1.这段代码中每个主循环或事件循环的作用是什么(如果我使用正确的术语。我猜它们都是事件循环)
2. 如果我的应用程序不是 GUI 应用程序,为什么我需要 gobject mainloop 或 qt mainloop,因为这是从 X11 库中捕获用户生成的事件所必需的(在 Linux 的情况下)
3. 为什么我不能用一个什么都不做的无限循环来代替gobject主循环(如下)
while True:
pass
【问题讨论】:
-
我已经更新了我的答案,以尝试更好地解释其中涉及的概念。希望能帮助到你。 (另外,如果有帮助,请接受答案:))
标签: python python-3.x dbus pyqt5