Unknown type '\x29' in D-Bus signature

Hallo Liste, ich versuche mittels python und dbus die Musiksammlung meines bisherigen Musicplayers 'gmusicbrowser' auszulesen. Dafür stellt das Progamm ein DBus-Interface[1] zur Verfügung, welches die Methode Get() beinhaltet und der zwei Parameter übergeben werden sollen. Das ganze sieht ungefähr so aus: <snip> remote_object = bus.get_object("org.gmusicbrowser", "/org/gmusicbrowser") gmb_dbus = dbus.Interface(remote_object, 'org.gmusicbrowser') gmb_id_list = gmb_dbus.GetLibrary() print "rating: %s" % gmb_dbus.Get(str(gmb_id_list[0]), 'rating') </snip> führe ich den code aus, bekomme ich folgende fehler, zu denen ich leider nix im internet finde ERROR:dbus.connection:Unable to set arguments ('9959', 'rating') according to signature u'(ss)': <type 'exceptions.TypeError'>: Unknown type '\x29' in D-Bus signature Traceback (most recent call last): File "dbsync/read.py", line 93, in <module> example() File "dbsync/read.py", line 88, in example print "rating: %s" % gmb_dbus.Get(str(gmb_id_list[0]), 'rating') File "/usr/lib/pymodules/python2.7/dbus/proxies.py", line 140, in __call__ **keywords) File "/usr/lib/pymodules/python2.7/dbus/connection.py", line 620, in call_blocking message.append(signature=signature, *args) TypeError: Unknown type '\x29' in D-Bus signature Hat jemand ne Idee? ciao ulf [1]http://wiki.gmusicbrowser.org/dbus_api#functions -- free art - free mind

Ulf Seltmann wrote:
Hallo Liste,
ich versuche mittels python und dbus die Musiksammlung meines bisherigen Musicplayers 'gmusicbrowser' auszulesen. Dafür stellt das Progamm ein DBus-Interface[1] zur Verfügung, welches die Methode Get() beinhaltet und der zwei Parameter übergeben werden sollen. Das ganze sieht ungefähr so aus:
<snip> remote_object = bus.get_object("org.gmusicbrowser", "/org/gmusicbrowser") gmb_dbus = dbus.Interface(remote_object, 'org.gmusicbrowser') gmb_id_list = gmb_dbus.GetLibrary() print "rating: %s" % gmb_dbus.Get(str(gmb_id_list[0]), 'rating') </snip>
führe ich den code aus, bekomme ich folgende fehler, zu denen ich leider nix im internet finde
ERROR:dbus.connection:Unable to set arguments ('9959', 'rating') according to signature u'(ss)': <type 'exceptions.TypeError'>: Unknown type '\x29' in D-Bus signature Traceback (most recent call last): File "dbsync/read.py", line 93, in <module> example() File "dbsync/read.py", line 88, in example print "rating: %s" % gmb_dbus.Get(str(gmb_id_list[0]), 'rating') File "/usr/lib/pymodules/python2.7/dbus/proxies.py", line 140, in __call__ **keywords) File "/usr/lib/pymodules/python2.7/dbus/connection.py", line 620, in call_blocking message.append(signature=signature, *args) TypeError: Unknown type '\x29' in D-Bus signature
Hat jemand ne Idee?
Leider sind die dbus-Schnittstellen chronisch unterdokumentiert. Die Erleuchtung brachte nach einigem Rumprobieren schließlich ein Blick in den Source-Code: #/usr/share/gmusicbrowser/gmusicbrowser_dbus.pm dbus_method('Get', [['struct', 'string', 'string']], ['string']); sub Get ... Die Methode erwartet ein "struct"; keine Ahnung, was das für Perl bedeutet, aber in Python scheint das einem tuple zu entsprechen:
import dbus bus = dbus.Bus() obj = bus.get_object("org.gmusicbrowser", "/org/gmusicbrowser") ids = obj.GetLibrary() ids dbus.Array([dbus.UInt32(0L), dbus.UInt32(1L)], signature=dbus.Signature('u')) obj.Get((1, "artist")) # man beachte die doppelten Klammern dbus.String(u'Steve Holden, Mark Shuttleworth.')
participants (2)
-
Peter Otten
-
Ulf Seltmann