0

このPythonプログラムは、Mediapplayerからプレイリストを再生します。1つの曲が終了するか、キーボードで入力した後、プレイリストは次の曲を再生します。

入力は次のとおりです。

#!/usr/bin/python
#-*-coding:ascii-*-

import dbus
import gobject

from dbus.mainloop.glib import DBusGMainLoop
DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()

banshee = bus.get_object('org.mpris.MediaPlayer2.banshee',
               '/org/mpris/MediaPlayer2')
iface = dbus.Interface(banshee,'org.mpris.MediaPlayer2.Player')

loop = gobject.MainLoop()
def on_reply():
        print"Start"
def on_error():
        print"Error"
def next_song():
        print"Next Song"
        iface.Next(reply_handler=on_reply,
        error_handler=on_error)
        gobject.timeout_add(4,next_song)
def on_error(error):
        print"Error"
        loop.quit()
        next_song()
try:
        loop.run()
finally:
        print"End"
        iface.Stop() 

出力: なし

前もって感謝します

4

3 に答える 3

1

mdbus2は、使用可能なメソッドのリストを提供する必要があります。このページからの抜粋:

$ mdbus2 org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2
...
[METHOD]    org.mpris.MediaPlayer2.Player.Pause() -> ()
[METHOD]    org.mpris.MediaPlayer2.Player.PlayPause() -> ()
[METHOD]    org.mpris.MediaPlayer2.Player.Stop() -> ()
[METHOD]    org.mpris.MediaPlayer2.Player.Play() -> ()
...

バンシーとやり取りしているという事実を反映するように例を調整します。Bansheeとmdbus2をインストールして自分で試してみましたが、インストーラースクリプトが失敗しました。

Pythonの組み込みツールを使用してイントロスペクションを試すこともできます。

$ python
>>> from org.mpris.MediaPlayer2 import Player
>>> dir(Player)

さらに良いことに、プログラムに同様のステートメントをドロップします。現在、コードの本体は簡単なので、dir()の結果を出力するだけです。

finally:
    print"End"
    dir(iface)
    iface.Stop()
于 2012-08-29T03:45:22.437 に答える
1

d-feetを使用して、使用しようとしているインターフェイスでメソッドが使用可能かどうかを確認できます。

dbus-monitorまた、バス上でどのメッセージが渡されるかを確認するために使用することもできます。構文は次のようになります。

dbus-monitor --monitor --address <your_bus_address>

上記のコマンドを使用すると、バス上のすべてのメッセージを取得できます。フィルタリングするには、次のようにします。

dbus-monitor --monitor --address <your_bus_address> interface=<IF_name> path=<path_name> dest=...

フィルタリングで部分的なインターフェイス/パス名を使用することはできません。高度なフィルタリングはいつでもgrepできます。

このエラーは通常、そのインターフェイスでメソッドが使用できない場合、または間違ったパラメータタイプのセットを使用してメソッドを呼び出そうとした場合に発生します。呼び出し元のコードで、関数のシグネチャも確認してください。

于 2012-08-29T06:26:34.993 に答える
1

パスが間違っていました。正しいパスは次のとおりです。

banshee = bus.get_object( "org.bansheeproject.Banshee"、 "/ org / bansheeproject / Banshee / PlayerEngine")

次のページで、パスとその仕組みに関する詳細情報を入手できます。

于 2012-10-26T08:56:20.357 に答える