У меня работает очень простая версия.У меня не совсем правильный предикат, так как эквивалентный вызов mdfind имеет дополнительные результаты.Кроме того, требуется два аргумента: первое - это базовый путь для работы, второе - поисковый запрос.
Вот код:
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 секунд, поэтому, если у нас будет запрос, который займет больше времени, мы получим только частичные результаты.