ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 概述 结合dmidecode获取系统信息。 此处仅获取System Informaion段的部分信息 方案1 检测空行 只有'\n' 方案2 检测是否有新段落开始,line[0].strip() #### 方案1 * 检测到System Informaion,开启内层循环,使用列表记录相关信息,检测到本段结束,跳出循环并返回值 * 重点:开始记录System Informaion容易,本段结束时如何跳出,才是重点 ```python #!/usr/bin/env python #coding: utf-8 from subprocess import Popen, PIPE def getDimSysInfoList(): """获取System Information部分内容列表 输入:无 输出:dmi列表""" dmi_sysinfo_list = [] p = Popen(['dmidecode'], stdout=PIPE) dmi_info = p.stdout # 使用文件迭代器按行进行遍历 for line in dmi_info: if line.startswith('System Information'): # 检测到System Information后,接着上面的for循环继续遍历文件 for line in dmi_info: # 重点:可迭代对象dmi_info,接着外层循环的位置继续迭代 # 在这个for循环中,检测到'\n',说明System Information结束,跳出此层for循环 if line == '\n': break else: dmi_sysinfo_list.append(line.strip()) # 内层的for循环结束,函数返回结果 return dmi_sysinfo_list def getInfo(): """获取System Information并重新组织为字典""" dmi_sysinfo_list = getDimSysInfoList() # 列表解析和字典解析的结合 dmidict = {k: v.strip() for k,v in [item.split(':') for item in dmi_sysinfo_list]} # 获取指定部分信息字典 dmidict = {item: dmidict[item] for item in ['Manufacturer','Product Name', 'Version']} return dmidict if __name__ == '__main__': dmidict = getInfo() for k, v in dmidict.iteritems(): print '%s: %s' % (k, v) ``` #### 方案2 ```python #!/usr/bin/env python # -*- coding:utf8 -*- from subprocess import Popen,PIPE def getDmiInfo(): p = Popen(['dmidecode'],stdout=PIPE) dmi_info = p.stdout.read() return dmi_info def getSysInfoList(s): sys_info_list = [] # 标志位:是否开始储存数据 sys_start = False # 去除列表中为空的元素 dmi_list = [i for i in s.split('\n') if i] for line in dmi_list: if line.startswith('System Information'): sys_start = True continue if sys_start: # 检测到有新段落开始,则跳出for循环 if line[0].strip(): break else: sys_info_list.append(line) return sys_info_list def getSysinfoDict(): dmi_dic = {} dmi_info = getDmiInfo() sys_info_list = getSysInfoList(dmi_info) sys_info_dict = dict([item.strip().split(': ') for item in sys_info_list]) sys_info_dict = {item: sys_info_dict[item] for item in ['Manufacturer','Product Name', 'Version']} return sys_info_dict if __name__ == "__main__": print getSysinfoDict() ```