ubuntuusers.de

Python dbus Rhythmbox

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

farbfilm

Anmeldungsdatum:
25. Juni 2009

Beiträge: 51

Hallo,

ich habe eine kleines Skript geschrieben un Rhythmbox per Python zu steuern.

Hier der Code:

import dbus

def remote(arg):
    sesion_bus = dbus.SessionBus()
    rbox = sesion_bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Player')
    player = dbus.Interface(rbox, 'org.gnome.Rhythmbox.Player')
    cmd = { 'next':player.next(),
            'last':player.previous()}
    cmd[arg]

Es funktioniert soweit auch. Nur werden immer alle Kommandos im Dictionary cmd ausgeführt obwohl ich sie nur mit dem jeweiligen Parameter aufrufe.

Also: Wenn ich last auskommentiere funktioniert next oder umgekehrt. Wenn ich den Code wie oben ausführe wird erst next und dann last ausgeführt.

Bin schon am verzweifeln. Kann mir jemand helfen?

Besten Dank.

Gruß,

farbfilm

DasIch

Avatar von DasIch

Anmeldungsdatum:
2. November 2005

Beiträge: 1130

Werte in Dictionaries sind keine Blocks wie in Smalltalk oder Ruby, sie werden sofort ausgeführt wenn es Expressions sind. Dementsprechend ist es völlig irrelevant was für ein Argument du übergibst.

farbfilm

(Themenstarter)

Anmeldungsdatum:
25. Juni 2009

Beiträge: 51

Danke!

Hat nicht nur funktioniert, sondern ich habe auch etwas gelernt.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

Es hat einen Grund warum die Methode previous heisst und nicht last. last ist nämlich absolut zu sehen, also bei 10 Liedern ist "last" immer das 10. egal welches gerade aktuell spielt. Während "previous" das Letzte bzw. Vorhergehende relativ zum Aktuellen ist.

farbfilm

(Themenstarter)

Anmeldungsdatum:
25. Juni 2009

Beiträge: 51

Hallo Marc,

du scheinst ja zu wissen wovon du sprichst... deshalb die Frage.

Sind diese Methoden irgendwo dokumentiert. Ich suche mir da zur Zeit einen Wolf.

Beste Grüße,

farbfilm

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

@farbfilm: Ich weiss nicht ob das als "dokumentiert" durchgeht, aber es gibt XML-Dateien, welche die Schnittstelle beschreiben. Also die Signaturen – keine Beschreibung was die jeweilige Funktion tut. Für das Player-Objekt: http://svn.gnome.org/viewvc/rhythmbox/trunk/shell/rb-shell-player.xml?view=markup

Es gibt noch zwei andere Objekte die Rythmbox über dbus zur Verfügung stellt. Für die gibt es jeweils auch eine XML-Datei mit der Schnittstellenbeschreibung.

YEPHENAS

Anmeldungsdatum:
8. Juni 2009

Beiträge: 352

Wenn es nur um die Schnittstellen/Signaturen geht, dann kannst du auch d-feet verwenden und bequem durch die exponierten Objekte und Schnittstellen browsen und einzelne Methoden per Doppelklick ausführen (Parameter können in Python-Syntax übergeben werden).

Antworten |