本功能在DJANGO 框架的WEB应用上面做过实现,可以将数据导出到EXCEL表格,具体代码如下:
#views.py
def chkdisks(request):
if request.method=="POST":
if request.POST.has_key('exp'):
try:
infolists=models.computersinfo.objects.all().values('ipaddr','uname','pwd','ostype','contact')
except Exception:return render(request,"manages.html",{"DATABASE ERROR"})
try:
filenames=wbemtest.trywexdisk(infolists)
except Exception:
return render(request,"manages.html",{"login_err":"CANN'T LOAD DATA"})
return render(request,"manages.html",{"login_err":"downloadlink:ftp://10.*.*.*/"+filenames})
wbemtest.py
# -*- coding: utf-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import time
import wmi
import xlsxwriter
import dj27.models
import pwden
import alert
import datetime
import unixs
#wbemtest.trywexdisk函数
def trywexdisk(infolists):
nowtime=time.strftime('%Y-%m-%d-%H-%M-%S',time.localtime(time.time()))+""
bookurl="\\\\10.*.*.*\\*\\temp\\bak\\"+nowtime+'disks.xlsx'filenames=nowtime+'disks.xlsx'
workbook = xlsxwriter.Workbook(bookurl)
worksheet = workbook.add_worksheet()
title=[u'主机IP',u'分区',u'磁盘空间G',u'已用空间G',u'剩余空间G',u'已用百分比%']
format=workbook.add_format()
worksheet.set_column(0,5,15)
format.set_bold()
worksheet.write_row('A1',title,format)
row=1
col=1
for dicts in infolists:
h=dicts["ipaddr"]
u=dicts["uname"]
p=dicts["pwd"]
p=pwden.de(p) #解密密码,因为密码以加密的方式保存在数据库
ostype=dicts["ostype"]
try:
if ostype=="linux":
a=unixs.get_linuxfs_info(h,u,p)
b={}
for b in a:
worksheet.write(row,0,b["hostname"])
worksheet.write(row,col,b["Caption"])
worksheet.write(row,col+1,b["DiskTotal"])
worksheet.write(row,col+2,b["UseSpace"])
worksheet.write(row,col+3,b["FreeSpace"])
worksheet.write(row,col+4,b["Percent"])
row=row+1
else:
a=get_fs_info(h,u,p)
b={}
for b in a:
worksheet.write(row,0,b["hostname"])
worksheet.write(row,col,b["Caption"])
worksheet.write(row,col+1,int(b["DiskTotal"]))
worksheet.write(row,col+2,int(b["UseSpace"]))
worksheet.write(row,col+3,int(b["FreeSpace"]))
worksheet.write(row,col+4,b["Percent"])
row=row+1
except Exception:
pass
workbook.close()
return filenames
unixs.py
import re
import os,sys
import paramiko
import time
reload(sys)
sys.setdefaultencoding('utf-8')
#unixs.get_linuxfs_info函数
def get_linuxfs_info(h,u,p):
try:
clients = session(h,u,p)
tmplists=get_logicdisks(h,clients)
return tmplists
except Exception:
pass
def session(host,uname,pwd):
try:
ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host,username=uname, password=pwd)
return ssh
except Exception as e:
return "None"
def get_logicdisks(hosts,clients):
try:
stdin, stdout, stderr = clients.exec_command("df -Plh")
diskinfo=stdout.readlines()
tmplist=[]
for line in diskinfo:
tmpdict={}
if line.startswith('/dev/'):
alldisk=str(line.split()[1])
tmpdict["DiskTotal"]=alldisk
allusedisk=str(line.split()[2])
tmpdict["UseSpace"]=allusedisk
allfreedisk=str(line.split()[3])
tmpdict["FreeSpace"]=allfreedisk
usepercent=str(line.split()[4])
tmpdict["Percent"]=usepercent
logicname=str(line.split()[5])
tmpdict["Caption"]=logicname
tmpdict["hostname"]=str(hosts)
tmplist.append(tmpdict)
return tmplist
except Exception:
pass
#WINDOWS获取分区信息的函数 wbemtest.get_fs_info
def get_fs_info(host,uname,pwd):
"""
获取文件系统信息
包含分区的大小、已用量、可用量、使用率、挂载点信息
"""
tmplist = []
try:
c = wmi.WMI(computer=host,user=uname,password=pwd)
for physical_disk in c.Win32_DiskDrive():
for partition in physical_disk.associators("Win32_DiskDriveToDiskPartition"):
for logical_disk in partition.associators("Win32_LogicalDiskToPartition"):
tmpdict = {}
tmpdict["Caption"] = logical_disk.Caption
tmpdict["DiskTotal"] = int(logical_disk.Size)/1024/1024/1024
tmpdict["UseSpace"]=(int(logical_disk.Size)-int(logical_disk.FreeSpace))/1024/1024/1024
tmpdict["FreeSpace"]=int(logical_disk.FreeSpace)/1024/1024/1024
tmpdict["Percent"]=int(100.0*(int(logical_disk.Size)-int(logical_disk.FreeSpace))/int(logical_disk.Size))
tmpdict["hostname"]=host
tmplist.append(tmpdict)
return tmplist
except Exception:
pass