1

ubuntu 12.04 を使用しており、Rhythmbox データベースにクエリを実行するための Python プラグインを作成しようとしています。Rhythmbox のバージョンは v2.96 ですが、この問題は v2.97 でも発生します。Python クエリを実行すると、Ubuntu がセグメンテーション エラーでクラッシュします。

以下が正しいことを確認する必要があります。また、Ubuntu に固有のバグを見つけた場合、または正しくクエリする方法を誤解した場合は、確認する必要があります。別のディストリビューションを使用している他の誰かが確認できる場合-これは大歓迎です.

セグメンテーション違反に関して、bugzilla にバグ レポートを提出しました。ただし、私の質問は厳密にはこれに関するものではありません。具体的には、データを照会するための正しい python コードを確認しようとしています。

したがって、私の質問: Rhythmbox データベースをクエリするには、以下のコード スニペットは正しいですか、それとも、クエリを有効にするために追加のパッケージをインストールする必要がありますか?

手順:

  1. Python コンソール プラグインを有効にする
  2. 入力します(または、次の行ごとにコピーして貼り付けます)
from gi.repository import RB, GLib

デシベル = shell.props.db
query_model = RB.RhythmDBQueryModel.new_empty(db)
クエリ = GLib.PtrArray()

db.query_append_params( query, RB.RhythmDBQueryType.EQUALS, RB.RhythmDBPropType.ARTIST, 'アーティスト名' )
db.query_append_params( query, 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でのみ機能します。

はい、本当に-私はFedora17の32ビットライブCDとLMDEをテストしてきました。どちらもUbuntu12.04と同じセグメンテーション違反の問題を示しています。

共通の要因は、Ubuntu 12.04 /Fedora17とLMDEを32ビットのインカネーションでテストしていたことです。

3つすべてを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 に答える