Я пытаюсь создать приложение Python, которое читает сообщения, проходящие через DBus, что-то дает тот же вывод, что и bash dbus-monitor. Согласно тому, что я получил от поиска, код должен быть довольно простым и ясным, что-то вроде:
import dbus, gobject
from dbus.mainloop.glib import DBusGMainLoop
def msg_cb(bus, msg):
args = msg.get_args_list()
print "Notification from '%s'" % args[0]
print "Summary: %s" % args[3]
print "Body: %s", args[4]
if __name__ == '__main__':
DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
string = "interface='org.freedesktop.Notifications',member='Notify'"
bus.add_match_string(string)
bus.add_message_filter(msg_cb)
mainloop = gobject.MainLoop ()
mainloop.run ()
Но запустив его, я получаю только сообщение, возвращаемое DBus, о том, что приложение подключено, в отличие от того, что я получаю, если выполняю команду bash:
dbus-monitor --session interface='org.freedesktop.Notifications',member='Notify'
В этом случае я могу просмотреть все сообщения, соответствующие условию фильтра. Кто-нибудь, пожалуйста, помогите мне понять, где я терплю неудачу? Спасибо
print
вывода с этим синтаксисом в стиле printf-C, хотя способ получения сообщений кажется мне правильным. - person syntaxerror   schedule 11.10.2014