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)


获得df多个磁盘空间及内存:

#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import division
import os
file = open('/soft/disk','a')

def disk_root():
        disk = os.statvfs('/')
        percent = (disk.f_blocks - disk.f_bfree) * 100 / (disk.f_blocks -disk.f_bfree + disk.f_bavail)
        return percent

def disk_backup():
        disk = os.statvfs('/backup')
        percent = (disk.f_blocks - disk.f_bfree) * 100 / (disk.f_blocks -disk.f_bfree + disk.f_bavail)
        return percent

def disk_project():
        disk = os.statvfs('/project')
        percent = (disk.f_blocks - disk.f_bfree) * 100 / (disk.f_blocks -disk.f_bfree + disk.f_bavail)
        return percent

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 = (100 - ((mem['MemFree'] + mem['Buffers'] + mem['Cached']) / mem['MemTotal']) * 100)
        return Mem

root = '/                   %0.f%%'%disk_root()+'\n'
backup = '/backup             %0.f%%'%disk_backup()+'\n'
project = '/project            %0.f%%'%disk_project()+'\n'
memory = 'memory           %0.2f%%'%mem_stat()+'\n'

file.writelines('Filesystem&Mem     Use%'+'\n'+'-----------------------'+'\n')
file.writelines(root)
file.writelines(backup)
file.writelines(project)
file.writelines(memory)
file.flush()
file.close()

打印结果:

cat disk

Filesystem&Mem     Use%

-----------------------

/                   24%

/backup             62%

/project            21%

memory           26.33%



方法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%