Решила попробоавть dbus. Меня заинтересовала возможность взаимодействия двух приложений по средством d-bus. В качесвте приложений выстпают питоновски модули, некогда мною написанные.
решила экспериментировать на неком упрощенно варианте:
есть код
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
import MySQLdb
import dbus
import gobject
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
import os
main_loop = DBusGMainLoop()
bus = dbus.SessionBus(mainloop=main_loop)
DBUS_NAME = "org.myHelpdesk"
DBUS_PATH = "/org/myHelpdesk"
class Helpdesk(dbus.service.Object):
def __init__(self):
global bus
bus_name = dbus.service.BusName(DBUS_NAME, bus=bus)
dbus.service.Object.__init__(self, bus_name, DBUS_PATH)
@dbus.service.method(DBUS_NAME, in_signature='', out_signature='s')
def do(self):
conn = MySQLdb.connect(db='db', host='localhost', user='root', passwd='root')
conn.query("SET NAMES utf8")
cursor = conn.cursor(MySQLdb.cursors.DictCursor)
cursor.execute("SELECT `hd_thread`.`id` FROM `hd_thread` w")
rec = [r for r in cursor]
return str(rec)
class myHelpdesk:
def __init__(self):
self.loop = gobject.MainLoop()
helpdesk = Helpdesk()
def start(self):
print "run..."
try:
self.loop.run()
print "ok"
except:
print "some error"
start = myHelpdesk()
start.start()
но меня интересует вызов метода по средством python-dbus
Я делаю что-то вроде:
bus = dbus.SystemBus()
obj = bus.get_object('org.myHelpdesk', '/org/myHelpdesk')
iface = dbus.Interface(obj, '/org/myHelpdesk')
iface.get_dbus_method('do')
The name org.myHelpdesk was not provided by any .service files
Как мне правильно реализовать вызов метода из написанного мною лбъекта d-bus?