python获取linux系统信息的三种示例

方法一:psutil模块

#!usr/bin/env python
# -*- coding: utf-8 -*-

import socket
import psutil
class NodeResource(object):
  def get_host_info(self):
    host_name = socket.gethostname()
    return {'host_name':host_name}

  def get_cpu_state(self):
    cpu_count = psutil.cpu_count(logical=False)
    cpu_percent =(str)(psutil.cpu_percent(1))+'%'
    return {'cpu_count':cpu_count,'cpu_percent':cpu_percent}

  def get_memory_state(self):
    mem = psutil.virtual_memory()
    mem_total = mem.total / 1024 / 1024
    mem_free = mem.available /1024/1024
    mem_percent = '%s%%'%mem.percent
    return {'mem_toal':mem_total,'mem_free':mem_free,'mem_percent':mem_percent}

  def get_disk_state(self):
    disk_stat = psutil.disk_usage('/')
    disk_total = disk_stat.total
    disk_free = disk_stat.free
    disk_percent = '%s%%'%disk_stat.percent
    return {'mem_toal': disk_total, 'mem_free': disk_free, 'mem_percent': disk_percent}

方法二:proc

#!usr/bin/env python
# -*- coding: utf-8 -*-

import time
import os
from multiprocessing import cpu_count

class NodeResource(object):

  def usage_percent(self,use, total):
    # 返回百分占比
    try:
      ret = int(float(use)/ total * 100)
    except ZeroDivisionError:
      raise Exception("ERROR - zero division error")
    return '%s%%'%ret

  @property
  def cpu_stat(self,interval = 1):

    cpu_num = cpu_count()
    with open("/proc/stat", "r") as f:
      line = f.readline()
      spl = line.split(" ")
      worktime_1 = sum([int(i) for i in spl[2:]])
      idletime_1 = int(spl[5])
    time.sleep(interval)
    with open("/proc/stat", "r") as f:
      line = f.readline()
      spl = line.split(" ")
      worktime_2 = sum([int(i) for i in spl[2:]])
      idletime_2 = int(spl[5])

    dworktime = (worktime_2 - worktime_1)
    didletime = (idletime_2 - idletime_1)
    cpu_percent = self.usage_percent(dworktime - didletime,didletime)
    return {'cpu_count':cpu_num,'cpu_percent':cpu_percent}

  @property
  def disk_stat(self):
    hd = {}
    disk = os.statvfs("/")
    hd['available'] = disk.f_bsize * disk.f_bfree
    hd['capacity'] = disk.f_bsize * disk.f_blocks
    hd['used'] = hd['capacity'] - hd['available']
    hd['used_percent'] = self.usage_percent(hd['used'], hd['capacity'])
    return hd

  @property
  def memory_stat(self):
    mem = {}
    with open("/proc/meminfo") as f:
      for line in f:
        line = line.strip()
        if len(line) < 2: continue
        name = line.split(':')[0]
        var = line.split(':')[1].split()[0]
        mem[name] = long(var) * 1024.0
      mem['MemUsed'] = mem['MemTotal'] - mem['MemFree'] - mem['Buffers'] - mem['Cached']
    mem['used_percent'] = self.usage_percent(mem['MemUsed'],mem['MemTotal'])
    return {'MemUsed':mem['MemUsed'],'MemTotal':mem['MemTotal'],'used_percent':mem['used_percent']}

nr = NodeResource()

print nr.cpu_stat
print '=================='
print nr.disk_stat
print '=================='
print nr.memory_stat

方法三:subprocess

from subprocess import Popen, PIPE
import os,sys

''' 获取 ifconfig 命令的输出 '''
def getIfconfig():
  p = Popen(['ifconfig'], stdout = PIPE)
  data = p.stdout.read()
  return data

''' 获取 dmidecode 命令的输出 '''
def getDmi():
  p = Popen(['dmidecode'], stdout = PIPE)
  data = p.stdout.read()
  return data

''' 根据空行分段落 返回段落列表'''
def parseData(data):
  parsed_data = []
  new_line = ''
  data = [i for i in data.split('\n') if i]
  for line in data:
    if line[0].strip():
      parsed_data.append(new_line)
      new_line = line + '\n'
    else:
      new_line += line + '\n'
  parsed_data.append(new_line)
  return [i for i in parsed_data if i]

''' 根据输入的段落数据分析出ifconfig的每个网卡ip信息 '''
def parseIfconfig(parsed_data):
  dic = {}
  parsed_data = [i for i in parsed_data if not i.startswith('lo')]
  for lines in parsed_data:
    line_list = lines.split('\n')
    devname = line_list[0].split()[0]
    macaddr = line_list[0].split()[-1]
    ipaddr = line_list[1].split()[1].split(':')[1]
    break
  dic['ip'] = ipaddr
  return dic

''' 根据输入的dmi段落数据 分析出指定参数 '''
def parseDmi(parsed_data):
  dic = {}
  parsed_data = [i for i in parsed_data if i.startswith('System Information')]
  parsed_data = [i for i in parsed_data[0].split('\n')[1:] if i]
  dmi_dic = dict([i.strip().split(':') for i in parsed_data])
  dic['vender'] = dmi_dic['Manufacturer'].strip()
  dic['product'] = dmi_dic['Product Name'].strip()
  dic['sn'] = dmi_dic['Serial Number'].strip()
  return dic

''' 获取Linux系统主机名称 '''
def getHostname():
  with open('/etc/sysconfig/network') as fd:
    for line in fd:
      if line.startswith('HOSTNAME'):
        hostname = line.split('=')[1].strip()
        break
  return {'hostname':hostname}

''' 获取Linux系统的版本信息 '''
def getOsVersion():
  with open('/etc/issue') as fd:
    for line in fd:
      osver = line.strip()
      break
  return {'osver':osver}

''' 获取CPU的型号和CPU的核心数 '''
def getCpu():
  num = 0
  with open('/proc/cpuinfo') as fd:
    for line in fd:
      if line.startswith('processor'):
        num += 1
      if line.startswith('model name'):
        cpu_model = line.split(':')[1].strip().split()
        cpu_model = cpu_model[0] + ' ' + cpu_model[2] + ' ' + cpu_model[-1]
  return {'cpu_num':num, 'cpu_model':cpu_model}

''' 获取Linux系统的总物理内存 '''
def getMemory():
  with open('/proc/meminfo') as fd:
    for line in fd:
      if line.startswith('MemTotal'):
        mem = int(line.split()[1].strip())
        break
  mem = '%.f' % (mem / 1024.0) + ' MB'
  return {'Memory':mem}

if __name__ == '__main__':
  dic = {}
  data_ip = getIfconfig()
  parsed_data_ip = parseData(data_ip)
  ip = parseIfconfig(parsed_data_ip)

  data_dmi = getDmi()
  parsed_data_dmi = parseData(data_dmi)
  dmi = parseDmi(parsed_data_dmi)

  hostname = getHostname()
  osver = getOsVersion()
  cpu = getCpu()
  mem = getMemory()

  dic.update(ip)
  dic.update(dmi)
  dic.update(hostname)
  dic.update(osver)
  dic.update(cpu)
  dic.update(mem)

  ''' 将获取到的所有数据信息并按简单格式对齐显示 '''
  for k,v in dic.items():
    print '%-10s:%s' % (k, v)
from subprocess import Popen, PIPE
import time

''' 获取 ifconfig 命令的输出 '''
# def getIfconfig():
#   p = Popen(['ipconfig'], stdout = PIPE)
#   data = p.stdout.read()
#   data = data.decode('cp936').encode('utf-8')
#   return data
#
# print(getIfconfig())

p = Popen(['top -n 2 -d |grep Cpu'],stdout= PIPE,shell=True)
data = p.stdout.read()
info = data.split('\n')[1]
info_list = info.split()
cpu_percent ='%s%%'%int(float(info_list[1])+float(info_list[3]))
print cpu_percent

以上就是python获取linux系统信息的三种示例的详细内容,更多关于python获取linux系统信息的资料请关注我们其它相关文章!

(0)

相关推荐

  • linux系统使用python获取内存使用信息脚本分享

    复制代码 代码如下: #!/usr/bin/env Python from __future__ import print_functionfrom collections import OrderedDict def meminfo():    ''' Return the information in /proc/meminfo    as a dictionary '''    meminfo=OrderedDict() with open('/proc/meminfo') as f:  

  • 使用 Python 获取 Linux 系统信息的代码

    哪个Python版本? 当我提及Python,所指的就是CPython 2(准确的是2.7).我会显式提醒那些相同的代码在CPython 3 (3.3)上是不工作的,以及提供一份解释不同之处的备选代码.请确保你已经安装了CPython,在终端上输入python或者python3回车,然后你在终端上应该能看到python的提示符(prompt). 请注意,所有的程序在它们第一行都是#!/usr/bin/env/python,也就是说,我们想要Python的解释器来执行这些脚本.因此,如果你想你的脚

  • 使用python获取CPU和内存信息的思路与实现(linux系统)

    大家都知道,linux里一切皆为文件,在linux/unix的根目录下,有个/proc目录,这个/proc 是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做"/proc"),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息,在运行中(on the fly)改变设置(通过改变内核参数).与其他文件系统不同,/proc 存在于内存而不是硬盘中.proc 文件系统提供的信息如下: •进程信息:系统中的任何一个进程,在 proc 的子目录中都有一个同名的

  • 利用Python获取操作系统信息实例

    前言 每一位运维人员都应该对自己所管理的机器配置很清楚,因为这对我们快速处理问题很有帮助,比如随着业务增长,突然某些机器负载上涨的厉害,这时候要排查原因,除了从应用程序.架构上分析外,当前硬件性能的分析应该是必不可少的一环,今天我们将不用第三方模块,用python自带模块和系统提供的运行信息来获取我们需要的信息,这个脚本除了硬件外,还抓取了当前系统进程数和网卡流量功能,所以这个版本实现的功能基本对应了之前psutil实现的内容,多的不说了,直接贴代码: #!/usr/bin/env python

  • python获取系统内存占用信息的实例方法

    psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU.内存.磁盘.网络等)信息.它主要应用于系统监控,分析和限制系统资源及进程的管理.它实现了同等命令行工具提供的功能,如ps.top.lsof.netstat.ifconfig.who.df.kill.free.nice.ionice.iostat.iotop.uptime.pidof.tty.taskset.pmap等.目前支持32位和64位的Li

  • Python脚本获取操作系统版本信息

    查看系统版本信息是一件家常便饭的事情,有时候需要将版本信息录入到资产管理系统中,如果每次手动的去查询这些信息再录入系统那么是一件令人呢头疼的事情,如果采用脚本去完成这件事情,那么情况就有所不同了. 在Python的世界里,获取Windows版本信息和Linux的版本信息都可以采用platform模块,但platform模块也不是万能的,有些特殊的信息(比如Windows的内部版本号)这个模块拿不到,那么只能另辟蹊径了. 在Linux系统中,可以简单的认为一切都是文件,那么就算没有现成的命令可用时

  • linux系统使用python获取cpu信息脚本分享

    linux系统使用python获取cpu信息脚本分享 复制代码 代码如下: #!/usr/bin/env Pythonfrom __future__ import print_functionfrom collections import OrderedDictimport pprint def CPUinfo():    ''' Return the information in /proc/CPUinfo    as a dictionary in the following format:

  • 使用Python获取Linux系统的各种信息

    在本文中,我们将会探索使用Python编程语言工具来检索Linux系统各种信息.走你. 哪个Python版本? 当我提及Python,所指的就是CPython 2(准确的是2.7).我会显式提醒那些相同的代码在CPython 3 (3.3)上是不工作的,以及提供一份解释不同之处的备选代码.请确保你已经安装了CPython,在终端上输入python或者python3回车,然后你在终端上应该能看到python的提示符(prompt). 请注意,所有的程序在它们第一行都是#!/usr/bin/env/

  • python利用platform模块获取系统信息

    Python platform 模块 platform 模块用于查看当前操作系统的信息,来采集系统版本位数计算机类型名称内核等一系列信息. 使用方法: #coding:utf-8 import platform t=platform.system() print(t) #coding=utf-8 #platform_mode.py import platform ''' python中,platform模块给我们提供了很多方法去获取操作系统的信息 如: import platform platf

  • python获取linux系统信息的三种示例

    方法一:psutil模块 #!usr/bin/env python # -*- coding: utf-8 -*- import socket import psutil class NodeResource(object): def get_host_info(self): host_name = socket.gethostname() return {'host_name':host_name} def get_cpu_state(self): cpu_count = psutil.cpu

  • python获取linux系统信息的三种方法

    方法一:psutil模块 #!usr/bin/env python # -*- coding: utf-8 -*- import socket import psutil class NodeResource(object): def get_host_info(self): host_name = socket.gethostname() return {'host_name':host_name} def get_cpu_state(self): cpu_count = psutil.cpu

  • Python操作配置文件ini的三种方法讲解

    python 操作配置文件ini的三种方法 方法一:crudini 命令 说明 crudini命令是Linux下的一个操作配置文件的命令工具 用法 crudini --set [--existing] config_file section [param] [value] # 修改配置文件内容 crudini --get [--format=sh|ini] config_file [section] [param] # 获取配置文件内容 crudini --del [--existing] co

  • python批量修改文件名的三种方法实例

    目录 前言 一.python批量修改文件名 二.python批量修改文件名(按顺序) 三.python批量修改文件名(删除指定字符) 总结 前言 当我们从网站爬取若干张图片,或需要将一些txt.excel.jpg等大批量的文件修改为有规律的名称,方便整理. 提示:以下是本篇文章正文内容,下面案例可供参考 一.python批量修改文件名 提示:待修改的文件夹下只能包含需要修改的文件,然后更改源码里面的路径即可. 1.源码 代码如下(示例): #批量修改文件名 #批量修改图片文件名 import o

  • Python实现解析参数的三种方法详解

    目录 先决条件 使用 argparse 使用 JSON 文件 使用 YAML 文件 最后的想法 今天我们分享的主要目的就是通过在 Python 中使用命令行和配置文件来提高代码的效率 Let's go! 我们以机器学习当中的调参过程来进行实践,有三种方式可供选择.第一个选项是使用 argparse,它是一个流行的 Python 模块,专门用于命令行解析:另一种方法是读取 JSON 文件,我们可以在其中放置所有超参数:第三种也是鲜为人知的方法是使用 YAML 文件!好奇吗,让我们开始吧! 先决条件

  • Python获取linux主机ip的简单实现方法

    本文实例讲述了Python获取linux主机ip的简单实现方法.分享给大家供大家参考,具体如下: python有好几种方法可以获取主机的ip地址.我常用的一种是通过socket.socket().inet_ntoa()来实现,非常方便:但这种方法有个限制就是要把网卡名(比如eth0)作为参数传进来.所以加多了一个条件判断,如果发现以上方法获取ip抛异常时,那就用调起shell命令(ifconfig)和管道,把想要的ip给过滤出来. import socket import fcntl impor

  • Python操作MySQL数据库的三种方法总结

    1. MySQLdb 的使用 (1) 什么是MySQLdb? MySQLdb 是用于 Python 连接 MySQL 数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的. (2) 源码安装 MySQLdb: https://pypi.python.org/pypi/MySQL-python $ tar zxvf MySQL-python-*.tar.gz $ cd MySQL-python-* $ python setup.py buil

  • Python 循环终止语句的三种方法小结

    在Python循环终止语句有三种: 1.break break用于退出本层循环 示例如下: while True: print "123" break print "456" 2.continue continue为退出本次循环,继续下次循环 示例如下: while True: print "123" continue print "456" 3.自定义标记 Tag 自已定义一个标记为True或False 示例代码: Tag

  • Java中获取键盘输入值的三种方法介绍

    程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决方法吧: 以下将列出几种方法: 方法一:从控制台接收一个字符,然后将其打印出来 public static void main(String [] args) throws IOException{ System.out.print("Enter a char

随机推荐