# -*- coding: utf-8 -*-
#import
########################################################################
import os, sys
import time
import wmi
########################################################################
#function
########################################################################
def get_disk_info():
"""
获取物理磁盘信息。
"""
tmplist = []
c = wmi.WMI ()
for physical_disk in c.Win32_DiskDrive ():
tmpdict = {}
tmpdict["Caption"] = physical_disk.Caption
tmpdict["Size"] = long(physical_disk.Size)/1024/1024/1024
tmplist.append(tmpdict)
return tmplist
def get_fs_info() :
"""
获取文件系统信息。
包含分区的大小、已用量、可用量、使用率、挂载点信息。
"""
tmplist = []
c = wmi.WMI ()
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"] = long(logical_disk.Size)/1024/1024/1024
tmpdict["UseSpace"] = (long(logical_disk.Size)-long(logical_disk.FreeSpace))/1024/1024/1024
tmpdict["FreeSpace"] = long(logical_disk.FreeSpace)/1024/1024/1024
tmpdict["Percent"] = int(100.0*(long(logical_disk.Size)-long(logical_disk.FreeSpace))/long(logical_disk.Size))
tmplist.append(tmpdict)
return tmplist
if __name__ == "__main__":
disk = get_disk_info()
print disk
print '--------------------------------------'
fs = get_fs_info()
print fs
希望本文所述对大家的Python程序设计有所帮助。
笔者在文章-四种方法查看树莓派CPU温度中,用python查看树莓派温度和状态的程序,其中有一段python程序读取磁盘空间os.popen("df -h /") ,df -h /读取整个磁盘的使用情况。
这一次笔者在书籍上看到一个脚本,颇具意义。脚本完成磁盘检查,并打印出使用量位居前十位,生成报告rpt。命令 du -hs /root 可以查看目录的整体使用情况,du -hs /root/*可以查看目录一级的整体使用情况,输出统计信息,快速定位问题根源。
同时关于df与du,df是显示磁盘分区上可以使用的磁盘空间,du是显示已经使用的空间。
为了找出占用磁盘空间最多的目录,可以使用sort命令来排序,-r是允许数字排序,-n是逆序排序。
du -hs /root/* | sort -rn
sed编辑器可以对输出内容进行赛选,只选择前四行内容,并添加行号。最后使用gawk格式化输出。
du -hs /root/* | sort -rn | sed '{5,$D=}' | sed 'Ns/\n/ /' | awk '{printf $1 ":" "\t" $2 "\t" $3 "\n"}'
现在来看看脚本big_users.sh,脚本循环检测CHECK_DIRECTORIES中的目录,然后执行 du -S $DIR_CHECK 打印格式化输出磁盘使用情况。exec命令是打开文件outfilename作为stdout,即输出重定向。
#!/bin/bash
#
# Big_Users - Find big disk space users in various directories
###############################################################
# Parameters for Script
#
CHECK_DIRECTORIES=" /var /root" #Directories to check
#
############## Main Script #################################
#
DATE=$(date '+%m%d%y') #Date for report file
#
exec >disk_space_$DATE.rpt #Make report file STDOUT
#
echo "Top Ten Disk Space Usage" #Report header
echo "for $CHECK_DIRECTORIES Directories"
#
for DIR_CHECK in $CHECK_DIRECTORIES #Loop to du directories
do
echo ""
echo "The $DIR_CHECK Directory:" #Directory header
#
# Create a listing of top ten disk space users in this dir
du -S $DIR_CHECK 2>/dev/null |
sort -rn |
sed '{11,$D=}' |
sed 'Ns/\n/ /' |
gawk '{printf $1 ":" "\t" $2 "\t" $3 "\n"}'
#
done #End of loop
#
exit
运行 ./big_users.sh后生成的报告: