非常にシンプルなバージョンが機能しました。同等の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秒間検索するので、もっと時間がかかるクエリがあると、部分的な結果しか得られません。