设为首页 收藏本站
查看: 1037|回复: 0

[经验分享] 通过python获取服务器所有信息

[复制链接]

尚未签到

发表于 2018-8-16 08:56:28 | 显示全部楼层 |阅读模式
  #coding:utf-8
  #!/bin/python
  #author:rolin
  """
  getPubIp(),getPrivateIp(),getSystem_info()"包含系统版本,内核版本",getSsh_version(),getCpu(),getMemory(),getDiskTotal()
  注意:url是自己写的一个接口来获取云主机的公网ip,其实很简单,就是用django写一个获取客户端访问ip,然后把值返回即可
  """
  from subprocess import PIPE,Popen
  import re,urllib,urllib2,platform
  from multiprocessing import cpu_count
  from collections import namedtuple
  import json,os
  group = u"换皮"
  env = u"游戏服"
  url = "http://192.168.5.6:8000/pubApi/api/getIpAddr/"
  def getPubIp():
  """
  获取公有Ip
  """
  req = urllib2.Request(url)
  response = urllib2.urlopen(req)
  return json.loads(response.read())
  def getPrivateIp():
  """
  获取私有Ip
  """
  P = Popen(['ifconfig'],stdout=PIPE)
  data = P.stdout.read()
  list = []
  str = ''
  option = False
  lines = data.split('\n')
  for line in lines:
  if not line.startswith(' '):
  list.append(str)
  str = line
  else:
  str += line
  while True:
  if '' in list:
  list.remove('')
  else:
  break
  r_devname = re.compile('(eth\d*|lo)')
  r_mac = re.compile('HWaddr\s([A-F0-9:]{17})')
  r_ip = re.compile('addr:([\d.]{7,15})')
  for line in list:
  devname = r_devname.findall(line)
  mac = r_mac.findall(line)
  ip = r_ip.findall(line)
  if mac:
  return  ip[0]
  def getSystem_info():
  """
  获取系统版本(system_version,kernel_version)
  """
  pd ={}
  version = platform.dist()
  os_name = platform.node()
  os_release = platform.release()
  os_version = '%s %s' % (version[0],version[1])
  pd['os_name'] = os_name
  pd['os_release'] = os_release
  pd['os_version'] = os_version
  return pd
  def getSsh_version():
  """
  获取ssh版本号
  """
  pass
  def getCpu():
  """
  获取cpu个数
  """
  return cpu_count()
  def getMemory():
  """
  获取服务器内存大小
  """
  meminfo = {}
  with open('/proc/meminfo') as f:
  for line in f:
  meminfo[line.split(':')[0]] = line.split(':')[1].strip()
  totalMem =  int(meminfo['MemTotal'].split(' ')[0])/1048576 + 1
  return str(totalMem)+ 'G'
  disk_ntuple = namedtuple('partition',  'device mountpoint fstype')
  usage_ntuple = namedtuple('usage',  'total used free percent')
  #获取当前操作系统下所有磁盘
  def disk_partitions(all=False):
  """Return all mountd partitions as a nameduple.
  If all == False return phyisical partitions only.
  """
  phydevs = []
  f = open("/proc/filesystems", "r")
  for line in f:
  if not line.startswith("nodev"):
  phydevs.append(line.strip())
  retlist = []
  f = open('/etc/mtab', "r")
  for line in f:
  if not all and line.startswith('none'):
  continue
  fields = line.split()
  device = fields[0]
  mountpoint = fields[1]
  fstype = fields[2]
  if not all and fstype not in phydevs:
  continue
  if device == 'none':
  device = ''
  ntuple = disk_ntuple(device, mountpoint, fstype)
  retlist.append(ntuple)
  return retlist
  #统计某磁盘使用情况,返回对象
  def disk_usage(path):
  """Return disk usage associated with path."""
  st = os.statvfs(path)
  free = (st.f_bavail * st.f_frsize)
  total = (st.f_blocks * st.f_frsize)
  used = (st.f_blocks - st.f_bfree) * st.f_frsize
  try:
  percent = ret = (float(used) / total) * 100
  except ZeroDivisionError:
  percent = 0
  return usage_ntuple(total, used, free, round(percent, 1))
  def getPath():
  """
  获取磁盘的分区
  """
  disklist = []
  list = disk_partitions()
  for i in list:
  disklist.append(i[1])
  return disklist
  def getDiskTotal():
  """
  获取磁盘总的大小
  """
  newpathlist = []
  pathlist = []
  pathlist = getPath()
  pathlist.append("/dev/shm/")
  totalDiskList = []
  sum = 0
  for path in pathlist:
  disktotal = disk_usage(path)[0] / 1073741824 + 1
  totalDiskList.append(disktotal)
  for count in totalDiskList:
  sum += count
  sum = str(sum) + 'G'
  return sum
  print getPubIp(),getPrivateIp(),getSystem_info(),getSsh_version(),getCpu(),getMemory(),getDiskTotal()


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-552452-1-1.html 上篇帖子: 用python操作mysql数据库(之“更新”操作) 下篇帖子: CentOS6默认的python2.6.6升级到python2.7.10-Dan
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表