Python 在MediaPlayer中使用d-bus播放音乐家

Python 在MediaPlayer中使用d-bus播放音乐家,python,dbus,Python,Dbus,此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

此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() 
输出: 没什么


提前感谢

mdbus2应该给出可用方法的列表。摘自:

调整示例以反映您与女妖互动的事实。我试着自己安装Banshee和mdbus2来尝试这个,但是安装程序脚本失败了

您还可以尝试使用Python的内置工具进行内省

$ python
>>> from org.mpris.MediaPlayer2 import Player
>>> dir(Player)
更好的是,在程序中删除类似的语句。您的代码体目前非常简单,您可以只打印dir()的结果


mdbus2应该给出可用方法的列表。摘自:

调整示例以反映您与女妖互动的事实。我试着自己安装Banshee和mdbus2来尝试这个,但是安装程序脚本失败了

您还可以尝试使用Python的内置工具进行内省

$ python
>>> from org.mpris.MediaPlayer2 import Player
>>> dir(Player)
更好的是,在程序中删除类似的语句。您的代码体目前非常简单,您可以只打印dir()的结果

您可以使用查看该方法在您尝试使用的接口上是否可用

您还可以使用
dbus监视器
查看总线上传递的消息。语法应如下所示:

dbus-monitor --monitor --address <your_bus_address>
dbus监视器--监视器--地址
使用上面的命令,您将在总线上获得所有消息。要进行筛选,可以执行以下操作:

dbus-monitor --monitor --address <your_bus_address> interface=<IF_name> path=<path_name> dest=...
dbus监视器--监视器--地址接口=路径=目的地=。。。
在筛选中不能使用部分接口/路径名。你可以随时进行一些高级过滤

如果该方法在该接口上不可用,或者试图使用错误的参数类型集调用它,则通常会出现此错误。还可以检查调用代码中的函数签名。

您可以使用它来查看您尝试使用的接口上是否有该方法

您还可以使用
dbus监视器
查看总线上传递的消息。语法应如下所示:

dbus-monitor --monitor --address <your_bus_address>
dbus监视器--监视器--地址
使用上面的命令,您将在总线上获得所有消息。要进行筛选,可以执行以下操作:

dbus-monitor --monitor --address <your_bus_address> interface=<IF_name> path=<path_name> dest=...
dbus监视器--监视器--地址接口=路径=目的地=。。。
在筛选中不能使用部分接口/路径名。你可以随时进行一些高级过滤


如果该方法在该接口上不可用,或者试图使用错误的参数类型集调用它,则通常会出现此错误。同时检查调用代码中的函数签名。

路径错误。正确的路径是:

banshee=bus.get_对象(“org.bansheeproject.banshee”,“/org/bansheeproject/banshee/PlayerEngine”)


在下面的内容中,您可以获得有关路径及其工作方式的更多信息。

路径错误。正确的路径是:

banshee=bus.get_对象(“org.bansheeproject.banshee”,“/org/bansheeproject/banshee/PlayerEngine”)


在下面的内容中,您可以获得有关路径及其工作方式的更多信息。

非常感谢,但错误在iface.Stop()行。错误打印说明Stop()是一个未知方法,并且接口“org.mpris.MediaPlayer2.Player”不存在。非常感谢,但错误在iface.Stop()行。错误打印说明Stop()是一个未知的方法,并且接口“org.mpris.MediaPlayer2.Player”默认情况下不存在,它会打印总线上发生的所有内容。您可以筛选消息。我已编辑该消息以显示如何筛选。您应该使用感兴趣的界面进行过滤。这是打印:signal sender=org.freedesktop.DBus->dest=:1.166 serial=2 path=/org/freedesktop/DBus;interface=org.freedesktop.DBus;member=NameAcquired string“:1.166”是,这些是dbus监视器在总线上注册自身时显示的消息。如果您让它保持运行,然后从应用程序开始调用方法,在总线上发送信号,您将看到消息,因为它们将打印在dbus监视器上。我已经更新了我的问题。我发现了一些小错误。现在程序正在运行,没有任何打印。因此,我必须自己用命令“ctr+Z”结束这个过程。默认情况下,它会打印总线上发生的一切。您可以筛选消息。我已编辑该消息以显示如何筛选。您应该使用感兴趣的界面进行过滤。这是打印:signal sender=org.freedesktop.DBus->dest=:1.166 serial=2 path=/org/freedesktop/DBus;interface=org.freedesktop.DBus;member=NameAcquired string“:1.166”是,这些是dbus监视器在总线上注册自身时显示的消息。如果您让它保持运行,然后从应用程序开始调用方法,在总线上发送信号,您将看到消息,因为它们将打印在dbus监视器上。我已经更新了我的问题。我发现了一些小错误。现在程序正在运行,没有任何打印。所以我必须用命令“ctr+Z”来结束这个过程