如何在Python中表示dbus类型b(oss)?

1 投票
1 回答
774 浏览
提问于 2025-04-16 17:06

我正在用Python开发一个Mpris V2.1的接口。

这个接口的具体内容可以在这个文档里找到: http://www.mpris.org/2.1/spec/Playlists.html#Property:ActivePlaylist

文档里提到的类型比较复杂,里面包含布尔值、对象和字符串。我想知道在Python里应该怎么表示这种类型。是不是需要提供一个包含每个元素的列表或元组呢?我试过了,但好像不太管用。

1 个回答

4

根据D-Bus的规范,(b(oss))是一个包含两个部分的结构,第一个是布尔值(也就是真或假),第二个是一个包含三个部分的结构:一个对象路径和两个字符串。在Python中,这可以表示成类似下面的形式:

dbus.Struct((dbus.Boolean(a_boolean),
             dbus.Struct((dbus.ObjectPath(s1),
                          dbus.String(s2),
                          dbus.String(s3)))),
            signature="(b(oss))")

不过,你也可以把它当作一个简单的Python元组来使用,像这样:

( a_boolean, (s1, s2, s3) )

你是在写客户端还是服务器?如果是服务器的话,你还应该查看这个问题,里面有关于如何使用Python的dbus模块导出属性的详细信息。

撰写回答