2

mdfind に相当する python を書きたいと思います。.Spotlight-V100 メタデータを使用したいのですが、使用されているメタデータ db 形式の説明が見つかりませんが、NSMetadataQuery が必要なようです。組み込みの Obj-C バインディングを使用して Python でこれを行いたいのですが、それを機能させるための正しい呪文を理解することができませんでした。問題が呼び出しの非同期性にあるのか、それとも単に配線が間違っているだけなのかはわかりません。

「mdfind」に相当する単純な例は、最初は問題ありません。

4

1 に答える 1

1

非常にシンプルなバージョンが機能しました。同等のmdfind呼び出しには追加の結果があるため、述語が正しくありません。また、2つの引数が必要です。1つ目は作業元のベースパス名で、2つ目は検索語です。

コードは次のとおりです。

from Cocoa import *

import sys

query = NSMetadataQuery.alloc().init()
query.setPredicate_(NSPredicate.predicateWithFormat_("(kMDItemTextContent = \"" + sys.argv[2] + "\")"))
query.setSearchScopes_(NSArray.arrayWithObject_(sys.argv[1]))
query.startQuery()
NSRunLoop.currentRunLoop().runUntilDate_(NSDate.dateWithTimeIntervalSinceNow_(5))
query.stopQuery()
print "count: ", len(query.results())
for item in query.results():
    print "item: ", item.valueForAttribute_("kMDItemPath")

クエリ呼び出しは非同期であるため、より完全にするために、コールバックを登録し、実行ループを継続的に実行する必要があります。そのまま5秒間検索するので、もっと時間がかかるクエリがあると、部分的な結果しか得られません。

于 2010-10-22T18:24:41.470 に答える