我想编写mdfind的python等价物。我想使用.Spotlight-V100元数据,我找不到所使用的元数据db格式的描述,但NSMetadataQuery似乎是我需要的。我想使用内置的Obj-C绑定在python中执行此操作,但是无法找出正确的咒语来使其工作。不确定问题是否是调用的异步性质,或者我只是错误地将事物连接在一起。
一个简单的例子给出相当于“mdfind”的开头就可以了。
答案 0 :(得分:1)
我有一个非常简单的版本。我没有完全正确的谓词,因为等效的 mdfind 调用有额外的结果。此外,它需要两个args,第一个是工作的基本路径名,第二个是搜索词。
以下是代码:
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秒,所以如果我们的查询需要更长的时间,我们将只得到部分结果。