使用Spotify时“dbus send”和Python的“dbus”之间的差异

使用Spotify时“dbus send”和Python的“dbus”之间的差异,python,linux,spotify,dbus,Python,Linux,Spotify,Dbus,我无法在Python中重新创建dbus send命令。dbus send执行预期的、正在运行的操作: #!/bin/bash dbus-send \ --type=method_call \ --dest=org.mpris.MediaPlayer2.spotify \ /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.OpenUri \ string:spotify:playlist:74sUjcvpGf

我无法在Python中重新创建dbus send命令。dbus send执行预期的、正在运行的操作:

#!/bin/bash
dbus-send \
    --type=method_call \
    --dest=org.mpris.MediaPlayer2.spotify \
    /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.OpenUri \
    string:spotify:playlist:74sUjcvpGfdOvCHvgzNEDO
将Spotify播放器切换为查看请求的播放列表 开始播放播放列表中的第一首歌曲 在Python中重新创建时,最奇怪的事情发生了——它工作了一半。它会将Spotify播放器更改为播放列表,但不会播放第一首歌曲,并会在某种程度上中断播放器。从QDbusViewer调试应用程序手动运行调用时也会发生这种情况

在一个简单的python示例中,这看起来像:

#!/usr/bin/python3

import dbus

session_bus = dbus.SessionBus()
spotify = session_bus.get_object("org.mpris.MediaPlayer2.spotify", "/org/mpris/MediaPlayer2")
spotify_iface = dbus.Interface(spotify, dbus_interface='org.mpris.MediaPlayer2.Player')
spotify_iface.OpenUri("string:spotify:playlist:74sUjcvpGfdOvCHvgzNEDO")
将Spotify播放器切换为查看播放列表 播放歌曲的音频停止,但显示器仍显示正在播放 无法通过播放器中的播放/暂停/下一步按钮控制当前歌曲 未引发任何异常,退出0 其他方法调用,如PlayPause,似乎可以按预期工作 这对我来说非常奇怪,因为我本以为发送到DBus的消息是相同的。有人知道这种差异可能来自何处吗?

其底部建议dbus python不应用于新项目

以您的示例为例,如下所示:

导入pydbus 总线=pydbus.SessionBus spotify=bus.get'org.mpris.MediaPlayer2.spotify','/org/mpris/MediaPlayer2' OpenUri'spotify:playlist:74sUjcvpGfdOvCHvgzNEDO' pydbus还有一些更好的内省功能,因此您可以使用printdirspotify来查看所有可用的方法和属性。

它的底部建议不应将dbus python用于新项目

以您的示例为例,如下所示:

导入pydbus 总线=pydbus.SessionBus spotify=bus.get'org.mpris.MediaPlayer2.spotify','/org/mpris/MediaPlayer2' OpenUri'spotify:playlist:74sUjcvpGfdOvCHvgzNEDO' pydbus还有一些更好的内省功能,因此您可以使用printdirspotify查看所有可用的方法和属性。

已解决

问题归结为一个小的语法错误:

dbus-send [...] string:spotify:playlist:74sUjcvpGfdOvCHvgzNEDO
dbus send中需要该前缀字符串,以便它知道参数的数据类型

然而,在Python中,它添加了对dbus提供程序的一些反射,为我们解决这一问题:

spotify.OpenUri('spotify:playlist:74sUjcvpGfdOvCHvgzNEDO')
我们可以删除前导字符串:。该死

我通过使用设置自己的侦听器来检查返回的数据。

已解决

问题归结为一个小的语法错误:

dbus-send [...] string:spotify:playlist:74sUjcvpGfdOvCHvgzNEDO
dbus send中需要该前缀字符串,以便它知道参数的数据类型

然而,在Python中,它添加了对dbus提供程序的一些反射,为我们解决这一问题:

spotify.OpenUri('spotify:playlist:74sUjcvpGfdOvCHvgzNEDO')
我们可以删除前导字符串:。该死


我通过使用设置自己的侦听器来检查返回的数据。

这很有趣。我遵循KDE自身的示例代码,介绍如何与Krunner进行集成。我要试一试。谢谢。我测试了那个代码,仍然不起作用!我猜这里有一些非常奇怪的差异。有什么方法可以看出dbussend和python之间的消息差异吗?这很有趣。我遵循KDE自身的示例代码,介绍如何与Krunner进行集成。我要试一试。谢谢。我测试了那个代码,仍然不起作用!我猜这里有一些非常奇怪的差异。有什么方法可以看出dbussend和python之间的消息差异吗?