2

Python メソッドの動的作成に関連するいくつかのトピックを読み、その指示に従いましたが、機能しません。デコレータを使っているからなのか、それとも別のものを使っているからなのかわかりませ@ん。

コードはこちら、非常にシンプルです。

このコードを実行するとエラーは発生しませんでしたが、D-feet(dbus 情報を確認するツール) を使用すると、作成した新しいシグナルが見つかりませんでした。

#!/usr/bin/python

import dbus
import dbus.service
import dbus.glib
import gobject
from dbus.mainloop.glib import DBusGMainLoop

import psutil

class EventServer(dbus.service.Object):
    i = 0

    @dbus.service.signal('com.github.bxshi.event')
    def singal_example(self,msg):
        """ example of singals
        """
        print msg

    def __init__(self):
        bus_name = dbus.service.BusName('com.github.bxshi.event', bus=dbus.SessionBus())
        dbus.service.Object.__init__(self, bus_name, '/com/github/bxshi/event')

    def create(self):
        self.i +=1
        setattr(self.__class__, 'signal_'+str(self.i), self.singal_example)


if __name__ == "__main__":
    DBusGMainLoop(set_as_default=True)
    bus = dbus.SessionBus()
    eventserver = EventServer()
    gobject.timeout_add(1000,eventserver.create)
    loop = gobject.MainLoop()
    loop.run() 
4

1 に答える 1

0
  1. タイプミスがあります:singal_example代わりにsignal_example
  2. あなたのcreate-methodsetattrでは、クラスを呼び出します。何をしようとしているのかはわかりませんが、単に信号を発信する必要があります

これは修正された例です:

#!/usr/bin/python

import dbus
import dbus.service
import dbus.glib
import gobject
from dbus.mainloop.glib import DBusGMainLoop

#import psutil

class EventServer(dbus.service.Object):
    i = 0

    @dbus.service.signal('com.github.bxshi.event')
    def signal_example(self,msg):
        """ example of singals
        """
        print msg

    def __init__(self):
        bus_name = dbus.service.BusName('com.github.bxshi.event', bus=dbus.SessionBus())
        dbus.service.Object.__init__(self, bus_name, '/com/github/bxshi/event')

    def create(self):
        self.i +=1
        #setattr(self.__class__, 'signal_'+str(self.i), self.singal_example)
        self.signal_example('msg: %d' % self.i)


if __name__ == "__main__":
    DBusGMainLoop(set_as_default=True)
    bus = dbus.SessionBus()
    eventserver = EventServer()
    gobject.timeout_add(1000,eventserver.create)
    loop = gobject.MainLoop()
    loop.run()

その後、信号に接続できます:

# ...
bus = dbus.Bus()
service=bus.get_object('com.github.bxshi.event', '/com/github/bxshi/event')
service.connect_to_signal("signal_example", listener)
# ...
于 2012-06-07T08:04:04.280 に答える