## 概述
結合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()
```
- 前言
- 環境搭建
- pypi
- 打包
- Python 2 和 Python 3 的版本之間差別
- 項目
- 第一部分
- 第1章 基礎
- Python安裝
- python代碼文件類型
- python對象
- 核心數據類型
- 核心數據類型--整型和浮點型
- 核心數據類型--字符串
- str.format
- 核心數據類型--列表
- 核心數據類型--元組
- 核心數據類型--字典
- 核心數據類型--集合
- 核心數據類型--文件對象
- 調用bash
- 標準輸入輸出
- str-repr
- 字符編碼
- 迭代器和生成器
- 第2章 語句和語法
- 賦值語句
- if語句
- while語句
- for語句
- assert
- 第3章 函數
- 函數作用域
- 工廠函數
- 內置函數
- 遞歸
- 嵌套作用域和lambda
- 參數傳遞
- 函數式編程
- property可寫與可讀
- 第5章 模塊
- 模塊導入
- 模塊命名空間
- 相對導入和絕對導入
- 模塊重載
- 在模塊中隱藏數據
- 過渡性重載
- 第6章 類
- 面向對象還是面向過程?
- 構造函數 析構函數
- call
- 運算符重載
- str()
- 待定
- 即時生成屬性
- 多態
- 線程和進程
- thread模塊
- threading模塊
- threading線程鎖
- 糖果機
- multiprocessing
- 阻塞非阻塞同步異步
- 單線程和多線程對比
- 生產者消費者模型
- 第二部分
- 獲取系統資源信息
- 獲取進程所占的物理內存
- dmidecode獲取系統信息
- 網絡編程
- 網絡基礎
- python中的套接字
- socket模塊
- 第三部分 高級功能
- 閉包入門
- 閉包的應用
- 裝飾器入門
- 裝飾器應用
- 第四部分 項目實戰
- graphite
- 模塊
- collections
- datetime
- Enum
- faker
- fabric
- fileinput
- fire
- fnmatch
- getpass
- glob
- hashlib
- heapq
- json模塊
- log
- os
- Paramiko
- parser
- platform
- pyyaml
- Queue
- random
- re
- 特殊符號和字符
- re模塊
- shelves
- subprocess
- time
- urllib_urllib2_requests
- urllib urllib2
- requests
- 標準模塊ConfigParser
- 擴展模塊Mysqldb
- 擴展模塊dns
- 擴展模塊request
- uuid
- cacheout 緩存庫
- delorean 時間
- 附錄
- 內置函數
- python實現各種排序算法
- 常見報錯
- pymongo
- pyrocksdb
- 常用
- ERROR