获取linux系统信息的一个python脚本
其实获取系统信息,如果使用python的psutil的模块,更加的简洁好用。自己写的这个脚本算是一个python练习。
#!/usr/bin/env python2.7
# -*- coding:utf-8 -*-
import os
import subprocess
import re
import hashlib
#对字典取子集
def sub_dict(form_dict, sub_keys, default=None):return dict([(k, form_dict.get(k.strip(), default)) for k in sub_keys.split(',')])
#读取cpuinfo信息
# dmidecode -t 4
def read_cpuinfo():cpu_stat = []with open('/proc/cpuinfo', 'r') as f:data = f.read()for line in data.split('\n\n'):cpu_stat.append(line)return cpu_stat[-2]
#读取fdisk信息
def read_fdisk():p = subprocess.Popen('fdisk -l', stdout=subprocess.PIPE, shell=True)out = p.communicate()[0]info = []for i in out.split('\n\n'):for x in i.splitlines():if x:info.append(x)return info
#读取dmidecode信息
def read_dmidecode():p = subprocess.Popen('dmidecode -t 1', stdout=subprocess.PIPE, shell=True)return p.communicate()[0]
#读取ifconfig信息
def read_ifconfig():p = subprocess.Popen('ifconfig', stdout=subprocess.PIPE, shell=True)return p.communicate()[0]
#返回cpu信息:CPU型号、颗数、核数
def get_cpuinfo(data):cpu_info = {}for i in data.splitlines():k, v = [x.strip() for x in i.split(':')]cpu_info[k] = vcpu_info['physical id'] = str(int(cpu_info.get('physical id')) + 1)return sub_dict(cpu_info, 'model name,physical id,cpu cores')
#返回每块硬盘大小
def get_diskinfo(data):disk_info = {}m_disk = re.compile(r'^Disk\s/dev')for i in data:if m_disk.match(i):i = i.split(',')[0]k, v = [x for x in i.split(':')]disk_info[k] = vreturn disk_info
#返回硬件信息:品牌、型号
def get_dmiinfo(data):dmi_info = {}line_in = Falsefor line in data.splitlines():if line.startswith('System Information'):line_in = Truecontinueif line.startswith('\t') and line_in:k, v = [i.strip() for i in line.split(':')]dmi_info[k] = velse:line_in = Falsereturn sub_dict(dmi_info, 'Manufacturer,Product Name,Serial Number')
#返回网卡及ip信息:网卡、IP址、MAC地址
def get_ipinfo(data):data = (i for i in data.split('\n\n') if i and not i.startswith('lo'))ip_info = []ifname = re.compile(r'(eth[\d:]*|wlan[\d:]*)')ipaddr = re.compile(r'(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[0-9]{1,2})){3}')macaddr = re.compile(r'[A-F0-9a-f:]{17}')for i in data:x = {}if ifname.match(i):device = ifname.match(i).group()x['Adapter'] = deviceif macaddr.search(i):mac = macaddr.search(i).group()x['MAC'] = macif ipaddr.search(i):ip = ipaddr.search(i).group()x['IP'] = ipelse:x['IP'] = Noneip_info.append(x)return ip_info
#返回内存及swap大小
def get_meminfo():mem_info = {}with open('/proc/meminfo', 'r') as f:data = f.readlines()for i in data:k, v = [x.strip() for x in i.split(':')]mem_info[k] = int(v.split()[0])return sub_dict(mem_info, 'MemTotal,SwapTotal')
#返回操作信息
def get_osinfo():os_info = {}i = os.uname()os_info['os_type'] = i[0]os_info['node_name'] = i[1]os_info['kernel'] = i[2]return os_info
#唯一标识符
def get_indentity(data):match_serial = re.compile(r"Serial Number: .*", re.DOTALL)match_uuid = re.compile(r"UUID: .*", re.DOTALL)if match_serial.search(data):serial = match_serial.search(data).group()if match_uuid.search(data):uuid = match_uuid.search(data).group()if serial:serial_md5 = hashlib.md5(serial).hexdigest()return serial_md5elif uuid:uuid_md5 = hashlib.md5(uuid).hexdigest()return uuid_md5
if __name__ == "__main__":ipinfo = get_ipinfo(read_ifconfig())dmiinfo = get_dmiinfo(read_dmidecode())cpuinfo = get_cpuinfo(read_cpuinfo())diskinfo = get_diskinfo(read_fdisk())meminfo = get_meminfo()osinfo = get_osinfo()identity = get_indentity(read_dmidecode())
转载于:https://blog.51cto.com/share/1269078
获取linux系统信息的一个python脚本相关推荐
- python 百分比输出_获取Linux系统负荷百分比的python脚本
有台主机的CPU负荷监控脚本,原先是这么写的 import psutil sample_seconds = 1 print psutil.cpu_percent(sampel_seconds) 就是跑 ...
- python 调用控制台并获取返回结果_Java调用Python脚本并获取返回值
在Java程序中有时需要调用Python的程序,这时可以使用一般的PyFunction来调用python的函数并获得返回值,但是采用这种方法有可能出现一些莫名其妙的错误,比如ImportError.在 ...
- python你的人生_人生苦短:运行你的第一个 Python 脚本
Shell 是一个Read-Eval-Print-Loop(REPL),它只接受命令,评估它们并打印输出. 我会假设你已经安装了一个有效的Python解释器,已经准备运行你的第一个Python脚本. ...
- linux脚本输出缓存上限,关于 Linux 下后台执行 Python 脚本的缓冲问题
[问题简述] 在 Linux 下后台执行 Python 脚本,重定向到日志文件,日志文件迟迟没有内容. [方案一](测试有效)nohup python3 -u t.py &> log.l ...
- 【python脚本】linux中编写运行python脚本
linux中编写运行python脚本 以/home/me/share目录下的hello脚本为例 解释器 #! /usr/bin/pythonprint('hello') print('hi') pri ...
- python远程控制电脑_只需一个python脚本就可远程控制电脑,打开微信即可远程遥控操作...
原标题:只需一个python脚本就可远程控制电脑,打开微信即可远程遥控操作 今天带给大家一个非常有意思的 python 程序,基于 itchat 实现微信控制电脑.你可以通过在微信发送命令,来拍摄当前 ...
- python从外部传入参数_从另一个Python脚本运行一个Python脚本,并传入参数 - python...
我想从另一个Python脚本运行一个Python脚本.我想像使用命令行一样传递变量. 例如,我将运行我的第一个脚本,该脚本将遍历值列表(0.1.2.3),并将其传递给第二个脚本,依次为script2. ...
- python脚本中执行另一个脚本_如何用python调用另一个python脚本?
如果想要将已经设置好的内容,在转移到另一个位置要怎么做呢?小编能写到的方法有,照抄,复制,以及转移使用.在我们日常办公上是非常好理解的,就是ctr v,但是如果想在编程上,将某一位置拿去到别的项目上使 ...
- 创建一个Python脚本,实现以下功能。(1)定义一个函数,用于计算圆柱体的表面积、体积,函数名为comput,.输入参数为底半径(r)、高(h),返回值为表面积(S)、体积(V),返回多值的函
创建一个Python脚本,实现以下功能. (1)定义一个函数,用于计算圆柱体的表面积.体积,函数名为comput,.输入参数为底 半径(r).高(h),返回值为表面积(S).体积(V),返回多值的函数 ...
- linux使得python后台运行,linux 下后台运行python脚本
&符号 这两天要在服务器端一直运行一个Python脚本,当然就想到了在命令后面加&符号 $ python /data/python/server.py >python.log & ...
最新文章
- eclipse 快捷键文件地址
- php sf框架,GitHub - YanCastle/sf: php swoole framework
- grpc中监听端口添加及绑定
- appium---【Mac】Appium-Doctor提示WARN:“ ios_webkit_debug_proxy cannot be found”解决方案...
- 启明云端分享|乐鑫推出在线选型工具 ESP Product Selector
- Opencv打印显示Mat方法
- 关于并发数与在线数的概念
- php 立即执行函数,关于javascrip的立即执行函数的解析
- 使用Typescript开发(二)
- 超边际分析不能用计算机,一种基于超边际分析的分布式计算资源分配方法-Journalof.PDF...
- C# “配置系统未能初始化”
- 华为力推自研AI芯片,还记得大明湖畔的寒武纪吗?
- watch蜂窝开通服务器中断,原因找到了!Apple Watch Series 3为何无法连接蜂窝网络...
- MATLAB绘图基础01—复杂网络工具箱命令
- visio studio code安装之后的两个错误的解决办法
- 安装指定版本Kubernetes
- mysql怎么批量导入excel数据_phpmyadmin怎么批量导入excel数据到mysql
- 百度云有关Token
- 【教程】超详细通过Shizuku转生微信集成WeXposed实现防撤回与红包
- 2022-2028年中国祭祀用品行业市场竞争状况及发展趋向分析报告
热门文章
- PAIP.并发编程 多核编程 线程池 ExecutorService的判断线程结束
- paip.提升中文分词准确度---新词识别
- 农业银行王敬东——金融科技时代商业银行战略模式选择初探
- Rust: Integers: Recreation One
- (转)ICO是区块链与生俱来的特性,是金融深化的终局
- 洛可可集团董事长贾伟:未来组织的进化
- 这款机器人也想体验双十一!
- 云南公安云计算平台项目获中国优秀云计算开源案例特等奖
- 【通信】基于matlab GUI循环编码译码【含Matlab源码 1348期】
- 【优化算法】多目标人工蜂群算法(MOABC)【含Matlab源码 1236期】