如何使用PyObjC绑定和NSMetadataQuery编写等效于mdfind的python脚本?
我想用Python写一个和mdfind功能相同的东西。我想使用.Spotlight-V100的元数据,但我找不到关于这个元数据数据库格式的说明。不过,NSMetadataQuery似乎是我需要的。我想用Python通过内置的Obj-C绑定来实现这个功能,但我还没搞清楚怎么正确地让它工作。不太确定问题是出在调用的异步特性上,还是我把东西连接错了。
如果能给个简单的例子,展示如何实现“mdfind”的功能,那就太好了。
1 个回答
1
我做了一个非常简单的版本可以运行。不过,我的条件判断还不太正确,因为用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秒钟,如果我们的查询需要更长时间,就只能得到部分结果。