2010-11-08 9 views
11

Python ve dbus ile ilgili bir sorunum var. Geliştirici dokümanlarını ve teknik özelliklerini inceledim, ancak ana döngü nasıl kurulacağını anlamıyorum. Bildirim olaylarını dinlemek istiyorum. BkzPython ve d-bus: Ana döngü nasıl kurulur?

http://dbus.freedesktop.org/doc/dbus-python/doc/

ve

http://www.galago-project.org/specs/notification/0.9/index.html

Benim örnek komut dosyası:

import dbus 
from dbus.mainloop.glib import DBusGMainLoop 

class MessageListener: 

    def __init__(self): 

     DBusGMainLoop(set_as_default=True) 

     self.bus = dbus.SessionBus() 
     self.proxy = self.bus.get_object('org.freedesktop.Notifications', 
      '/org/freedesktop/Notifications') 

     self.proxy.connect_to_signal('NotificationClosed', 
      self.handle_notification) 

    def handle_notification(self, *args, **kwargs): 
     print args, kwargs 


if __name__ == '__main__': 
    MessageListener() 

DBusGMainLoop çalıştırmak gibi başka yöntemleri vardır(). Ben gobject bir döngü ve sourcecode değiştirirseniz :

import gobject 
loop = gobject.MainLoop() 
dbus.set_default_main_loop(loop) 
... 
loop.run() 

Ben hata mesajı aşağıdaki olsun:

Traceback (most recent call last): 
    File "dbus_example.py", line 40, in <module> 
    MessageListener() 
    File "dbus_example.py", line 9, in __init__ 
    dbus.set_default_main_loop(loop) 
TypeError: A dbus.mainloop.NativeMainLoop instance is required 

konusunda fikrin bu konuda ne yapmalı? Şimdiden teşekkürler. phineas

cevap

7

Kodunuzun üst kısmına import gobject yazın ve nesneyi başlattıktan sonra gobject.MainLoop().run() yapın. MainLoop'un DBusGMainLoop oluşturulduktan sonra oluşturulması gerektiğini düşünüyorum.

+2

çok teşekkürler, şimdi çalışıyor. Bir ana döngü inşaatı çok belli değil, değil mi? – phineas