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