Seite 1 von 1
D-Bus Abfrage von Player Metadaten
Verfasst: Dienstag 10. März 2015, 19:28
von synapsenstau
Moin,
ich bin absoluter Python neuling und verzweifele gerade an einer D-Bus Abfrage. Ich lese gerade ein Python Buch und brauche praktische erfahrungen. Zu diesem zwecken will ich ein vorhandenes Shell Script nach Python portieren.
Dafür will ich die Metadaten vom Vlc Player abfragen. In der Shell mache ich das mit
Code: Alles auswählen
qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Metadata
language: English
mpris:length: 481753425
mpris:trackid:
vlc:length: 481753
vlc:publisher: 9
vlc:time: 481
xesam:album: Darksiders
xesam:artist: Lupin
...
Egal was ich gerade verusche, habe ich gerade den Eindruck als wenn Fehlermeldungen exponentiell ansteigen könnten.
Vielleicht kann mir ja jemand einen Tipp geben zum Einstieg in die Python Welt. Ich wäre euch sehr dankbar.
Re: D-Bus Abfrage von Player Metadaten
Verfasst: Dienstag 10. März 2015, 21:45
von BlackJack
@synapsenstau: Mit welcher Anbindung versuchst Du das denn von Python aus? Das `dbus`-Modul und die Dokumentation von Freedesktop.org zu D-Bus allgemein und dem Modul im besonderen sollten da doch eigentlich weiterhelfen. Und ein Monitor/Debugger wie ``d-feet`` ist ganz nützlich.
Re: D-Bus Abfrage von Player Metadaten
Verfasst: Dienstag 10. März 2015, 23:19
von synapsenstau
Jep, mit d-feet habe ich die tage schon mir die qdbus Zeile zusammengebastelt.
Zusammengesucht habe ich mir die infos dort:
http://dbus.freedesktop.org/doc/dbus-py ... orial.html.
Code: Alles auswählen
import dbus
bus = dbus.SessionBus()
vlc_data = bus.get_object('org.mpris.MediaPlayer2.vlc','/org/mpris/MediaPlayer2')
metadata = vlc_data.get.Metadata(dbus_interface='org.mpris.MediaPlayer2.Player.Metadata')
print(metadata)
gibt als Fehler aus:
Code: Alles auswählen
metadata = vlc_data.get.Metadata(dbus_interface='org.mpris.MediaPlayer2.Player.Metadata')
AttributeError: '_DeferredMethod' object has no attribute 'Metadata'
Re: D-Bus Abfrage von Player Metadaten
Verfasst: Dienstag 10. März 2015, 23:25
von EyDu
Mal so ins Blaue gerate: Ich würde vermuten, dass es wohl eher ``getMetadata`` und nicht ``get.Metadata`` heißen sollte.
Re: D-Bus Abfrage von Player Metadaten
Verfasst: Dienstag 10. März 2015, 23:33
von BlackJack
Ich denke das ins Blaue raten ist das Problem hier. Es gibt weder `get` noch `getMetadata`. Es gibt eine `Get`-Methode. Es gibt kein Interface das 'org.mpris.MediaPlayer2.Player.Metadata' heisst. Die Interfaces werden in ``d-feet`` doch aufgelistet. Und die `Get`-Methode ist in der D-Bus-Dokumentation dokumentiert das sie als erstes Argument einen Interfacenamen und als zweites Argument den Namen des Properties haben möchte:
http://dbus.freedesktop.org/doc/dbus-sp ... properties
Re: D-Bus Abfrage von Player Metadaten
Verfasst: Mittwoch 11. März 2015, 00:38
von synapsenstau
Irgendwie verwirrt mich das alles ein weing. Ein solches interface habe ich doch oder bin ich da auf dem Holzweg? Das Blaue ist doch die Metadaten.

Re: D-Bus Abfrage von Player Metadaten
Verfasst: Mittwoch 11. März 2015, 00:54
von BlackJack
@synapsenstau: Ja das ausgewählte sind die Metadaten, aber wo siehst Du ein Interface 'org.mpris.MediaPlayer2.Player.Metadata'? Ich sehe da nur eines das 'org.mpris.MediaPlayer2.Player' heisst und ein Property mit dem Namen 'Metadata' hat. Und durch das Interface 'org.freedesktop.DBus.Properties' hat das '/org/mpris/MediaPlayer2'-Objekt eine 'Get'-Methode mit der man dieses Property abfragen kann.
Re: D-Bus Abfrage von Player Metadaten
Verfasst: Samstag 14. März 2015, 22:29
von synapsenstau
Ich danke dir für deine hilfe. Leider ist das wohl noch zu kompliziert für mich als Anfänger (verstehe leider nur Bahnhof). Ich habe eine andere Lösung für das problem gefunden (os.popen("qdbus.....")), welche funktioniert und mir das liefert was ich haben will.
Vielleicht zu einem späteren Zeitpunkt werde ich es noch mal mit einer direkten dbus Abfrage probieren.
Re: D-Bus Abfrage von Player Metadaten
Verfasst: Samstag 14. März 2015, 22:50
von BlackJack
@synapsenstau: In der Dokumentation zu `os.popen()` steht eine rote Textbox mit dem Hinweis das diese Funktion nicht mehr benutzt werden sollte und dafür das `subprocess`-Modul eingeführt wurde.
Re: D-Bus Abfrage von Player Metadaten
Verfasst: Samstag 14. März 2015, 22:58
von synapsenstau
Danke für den Hinweis. Lese gerade hier[1] und werde es wohl umstricken.
[1]
https://docs.python.org/3/library/subprocess.html