Unknown type '\x29' in D-Bus signature

23/09/2011 - 18:40 von Ulf Seltmann | Report spam
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
 

Lesen sie die antworten

#1 Peter Otten
24/09/2011 - 10:19 | Warnen spam
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.')

Ähnliche fragen