我应该在Apple的system_profiler中使用什么python数据结构和解析器?

我的问题就像一个模拟问题 http://my.safaribooksonline.com/0596007973/pythoncook2-CHP-10-SECT-17 最终使用2005年过时的xpath方法进入Python Cookbook,第2版,我无法使用10.6的内置python(也没有安装旧的软件包) 我希望...“检索有关Mac OS X系统的详细信息”,使用system_profiler在每次计算机启动时在脚本中对其进行汇总(脚本将在登录时启动)。 我收集的信息从SW版本到HW配置各不相同。 一个例子是, system_profiler SPSoftwareDataType | grep'Boot Volume' 它返回启动卷名称。我打了15到20个其他的信息电话。 我试图输出完整的'system_profiler>数据'并使用cat数据解析它grep,但是如果我像上面的例子一样运行每一行,这显然效率低下。 如果输入文件和cat | 18秒grep的。 如果打个人电话,则需要13秒 *我正试图尽可能快地完成它。 我推断我可能需要创建一个字典并使用键来引用数据,但我想知道解析和检索数据的最有效方法是什么?我在其他地方看到过使用system_profiler输出到XML并使用XML解析器的建议,但我认为可能有一些缓存和解析方法比首先输出到文件更有效。     
已邀请:
使用-xml选项
system_profiler
以标准OS X plist格式格式化输出,然后使用Python的内置plistlib解析为您可以内省的适当数据结构。一个简单的例子:
>>> from subprocess import Popen, PIPE
>>> from plistlib import readPlistFromString
>>> from pprint import pprint
>>> sp = Popen(["system_profiler", "-xml"], stdout=PIPE).communicate()[0]
>>> pprint(readPlistFromString(sp))
[{'_dataType': 'SPHardwareDataType',
  '_detailLevel': '-2',
  '_items': [{'SMC_version_system': '1.21f4',
              '_name': 'hardware_overview',
              'boot_rom_version': 'IM71.007A.B03',
              'bus_speed': '800 MHz',
              'cpu_type': 'Intel Core 2 Duo',
 ...
    

要回复问题请先登录注册