首页 > 代码库 > python监测硬盘使用率
python监测硬盘使用率
python获得磁盘剩余空间statvfs:
>>> import os >>> import statvfs >>> vfs=os.statvfs("/home") >>> vfs (4096, 4096, 70959944, 70058799, 66396080, 73269248, 73234981, 73234981, 0, 255) >>> dir(statvfs) [‘F_BAVAIL‘, ‘F_BFREE‘, ‘F_BLOCKS‘, ‘F_BSIZE‘, ‘F_FAVAIL‘, ‘F_FFREE‘, ‘F_FILES‘, ‘F_FLAG
struct statfs {
long f_type; /* 文件系统类型 */
long f_bsize; /* 经过优化的传输块大小 */
long f_blocks; /* 文件系统数据块总数 */
long f_bfree; /* 可用块数 */
long f_bavail; /* 非超级用户可获取的块数 */
long f_files; /* 文件结点总数 */
long f_ffree; /* 可用文件结点数 */
fsid_t f_fsid; /* 文件系统标识 */
long f_namelen; /* 文件名的最大长度 */
};
方法1(结果准确)
statfs结构中可用空间块数有两种f_bfree和 f_bavail,前者是硬盘所有剩余空间,后者为非root用户剩余空间,ext3文件系统给root用户分有5%的独享空间,所以这里是不同的地方。这里要强调的是每块的大小一般是4K。因此,要实现与df结果一致的就得在获得块数上乘以4,这样已用、可用、总块数就可以实现。如果还要实现百分比一致,那么要注意的是,df命令获得是整数百分比,没有小数,这里使用的进一法,而不是四舍五入法。所以在程序里直接+1取整。
def disk_stat(): import os hd={} disk = os.statvfs(‘/usr‘) percent = (disk.f_blocks - disk.f_bfree) * 100 / (disk.f_blocks -disk.f_bfree + disk.f_bavail) + 1 return percent print disk_stat()
(参考http://leaveboy.blog.sohu.com/133628786.html statfs获得硬盘使用情况 模拟linux命令 df)
方法2(这种不准确)
def disk_stat(): import os hd={} disk = os.statvfs(‘/‘) hd[‘available‘] = disk.f_bsize * disk.f_bavail / 1024000 hd[‘capacity‘] = disk.f_bsize * disk.f_blocks / 1024000 hd[‘used‘] = disk.f_bsize * disk.f_bfree / 1024000 return hd print "hd‘s capacity",disk_stat()[‘capacity‘] print "hd‘s available",disk_stat()[‘available‘] print "hd‘s used",disk_stat()[‘used‘]
——————————————
获取内存:
#!/usr/bin/python # -*- coding: utf-8 -*- from __future__ import division def mem_stat(): mem = {} f = open(‘/proc/meminfo‘) lines = f.readlines() f.close() for line in lines: name = line.split(‘:‘)[0] var = line.split(‘:‘)[1].split()[0] mem[name] = long(var) Mem = ((mem[‘MemFree‘] + mem[‘Buffers‘] + mem[‘Cached‘]) / mem[‘MemTotal‘]) * 100 print (‘内存剩余:%0.2f%%‘%Mem) mem_stat()
打印结果:
内存剩余:31.25%