1

我正在使用 ubuntu 12.04,我正在尝试编写一个 python 插件来查询 Rhythmbox 数据库。Rhythmbox 版本是 v2.96,但 v2.97 也会出现此问题。当我执行 python 查询时,Ubuntu 因分段错误而崩溃。

我需要确认以下内容是否正确,以及我是否发现了特定于 Ubuntu 的错误,或者我是否误解了如何正确查询。如果其他使用其他发行版的人可以确认 - 这将是最受欢迎的。

我已经就分段错误提交了关于 bugzilla的错误报告。但是,我的问题并不是严格意义上的——它专门试图确认正确的 python 代码来查询数据。

因此我的问题是:下面的代码片段对于查询 Rhythmbox 数据库是否正确,或者我是否需要安装一个额外的包来启用查询。

脚步:

  1. 启用 python 控制台插件
  2. 键入(或逐行复制并粘贴以下内容)
从 gi.repository 导入 RB、GLib

db = shell.props.db
query_model = RB.RhythmDBQueryModel.new_empty(db)
查询 = GLib.PtrArray()

db.query_append_params(查询,RB.RhythmDBQueryType.EQUALS,RB.RhythmDBPropType.ARTIST,'一些艺术家姓名')
db.query_append_params(查询,RB.RhythmDBQueryType.EQUALS,RB.RhythmDBPropType.TITLE,'一些歌曲名称')   

db.do_full_query_parsed(query_model, 查询)

对于 query_model 中的行:
    打印行[0].get_string(RB.RhythmDBPropType.ARTIST)
    打印行[0].get_string(RB.RhythmDBPropType.TITLE)

如果 ubuntu 12.04 在我输入此行时,Ubuntu 会因分段错误而崩溃

db.query_append_params( query, RB.RhythmDBQueryType.EQUALS, RB.RhythmDBPropType.ARTIST, 'some artist name' )

因此,我实际上是否正确使用了调用中的第一个参数 - 查询指针数组 (PtrArray) - 还是我的查询函数参数不正确?

4

2 回答 2

3

答案是……

好吧,这个问题确实是一个错误 - 但要回答我自己的问题,

的,在 Rhythmbox 中查询数据的语法与问题中正确说明的一样。

但是有一个...

查询数据仅适用于 64 位 linux。

是的,真的 - 我一直在测试 Fedora 17 的 32 位 live-cd 以及 LMDE。两者都表现出与 Ubuntu 12.04 相同的分段错误问题。

共同点是我正在测试 Ubuntu 12.04/Fedora 17 和 LMDE 的 32 位版本。

在 64 位变体中测试所有三个都按预期工作。

32 位问题是一个错误 - 并且已在 bugzilla 上报告 - 但提出的问题已得到解答。

谢谢。

于 2012-09-01T20:35:56.273 回答
1

我也遇到了这个。我设法通过手动迭代库来解决它:

    for row in self.shell.props.library_source.props.base_query_model:
        entry = row[0]
        artist = entry.get_string(RB.RhythmDBPropType.ARTIST)
        if self.sanitize(artist) in similar_artists_map:
            self.qm.add_entry(entry, -1)
于 2012-09-10T20:54:20.397 回答