这个python程序将播放Mediapplayer的播放列表。当一首歌曲结束或在键盘上打字后,播放列表将播放下一首歌曲。
输入为:
#!/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()
输出: 没什么
提前谢谢
答案 0 :(得分:1)
mdbus2应该提供可用方法的列表。取自this page:
$ 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接口的事实。我尝试安装Banshee和mdbus2来自己尝试,但安装程序脚本失败了。
您也可以尝试使用Python的内置工具进行内省。
$ python
>>> from org.mpris.MediaPlayer2 import Player
>>> dir(Player)
更好的是,在程序中删除类似的声明。您的代码体目前非常简单,您可以打印出dir()的结果。
finally:
print"End"
dir(iface)
iface.Stop()
答案 1 :(得分: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=...
您不能在过滤中使用部分接口/路径名称。您总是可以进行一些高级过滤。
如果该方法在该接口上不可用,或者您尝试使用一组错误的参数类型调用它,通常会出现此错误。在您的主叫代码中也检查功能签名。
答案 2 :(得分:1)
路径错了。正确的路径是:
banshee = bus.get_object(“org.bansheeproject.Banshee”,“/ org / bansheeproject / Banshee / PlayerEngine”)
在以下page上,您可以获得有关路径及其工作原理的更多信息。