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

2 python macos profiler parsing system-profiler

我的问题就像来自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解析器的建议,但我认为可能有一些缓存和解析方法比首先输出到文件更有效.

Ned*_*ily 7

使用-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',
 ...
Run Code Online (Sandbox Code Playgroud)