New to D-BUS; signals in Python bindings

Luigi Paioro luigi at lambrate.inaf.it
Thu Mar 30 01:24:51 PST 2006


Hello!

I'm brand-new to DBUS developping and for the time being I'm only doing some 
tests. I have SuSE Linux 10.0 with the default DBUS installed (0.42 I think), 
and I'm trying to make a simple HelloWorldObject program (with Python 
bindings) that puts on the bus this object and emits a signal. Another 
program named HelloWorldCall, listen for this signal and, once it receives 
the notification, prints the signal argument (just a message). Basing on the 
Tutorial, I've written this simple code:

### HelloWorldObject.py ###

import gobject
import dbus
import dbus.service

if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
    import dbus.glib

class HelloWorldObject(dbus.service.Object):
    def __init__(self, bus_name, 	
                        object_path='/org/freedesktop/HelloWorldObject'):
        dbus.service.Object.__init__(self, bus_name, object_path)

    @dbus.service.signal('org.freedesktop.HelloWorldIFace')
    def HelloSignal(self, message):
        pass

session_bus = dbus.SessionBus()
bus_name = dbus.service.BusName('org.freedesktop.HelloWorld', bus=session_bus)
object = HelloWorldObject(bus_name)

global i
i=0

def emit():
    global i
    i+=1
    object.HelloSignal("Seconds: %d" % i)

gobject.timeout_add(1000, emit)

mainloop = gobject.MainLoop()
mainloop.run()


### HelloWorldCall.py ###

import dbus
import gobject

bus = dbus.SessionBus()

proxy_obj1 = 
bus.get_object('org.freedesktop.HelloWorld','/org/freedesktop/HelloWorldObject')
iface1 = dbus.Interface(proxy_obj1, 'org.freedesktop.HelloWorldIFace')

def print_message(message):
    print message

iface1.connect_to_signal("HelloSignal", print_message, iface1)

mainloop = gobject.MainLoop()
mainloop.run()

##########

When I run this code, HelloWorldCall.py returns this error:

Traceback (most recent call last):
  File "HelloWorldCall.py", line 27, in ?
    iface1.connect_to_signal("HelloSignal", print_message, iface1)
  File "/usr/lib/python2.4/site-packages/dbus/_dbus.py", line 191, in 
connect_to_signal
    self._obj.connect_to_signal(signal_name, handler_function, dbus_interface)
  File "/usr/lib/python2.4/site-packages/dbus/proxies.py", line 77, in 
connect_to_signal
    path=self._object_path)
  File "/usr/lib/python2.4/site-packages/dbus/_dbus.py", line 120, in 
add_signal_receiver
    dbus_bindings.bus_add_match(self._connection, str(match_rule))
  File "dbus_bindings.pyx", line 1476, in dbus_bindings.bus_add_match
dbus_bindings.DBusException: Interface name '<Interface <ProxyObject wrapping 
<dbus._dbus.SessionBus instance at 0x403e366c> 
org.freedesktop.HelloWorld /org/freedesktop/HelloWorldObject at 403e37ac> 
implementing org.freedesktop.HelloWorldIFace at 403e3bcc>' is invalid


Well, of course I'm mistaking something, but I don't understand what!

Can you help me, please?

Excuse me for this elementary question...


Thank you in advance.

Luigi


More information about the dbus mailing list