论坛首页 编程语言技术论坛

python获得磁盘剩余空间 statvfs

浏览 8126 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-04-01   最后修改:2010-04-01
在linux上工作大家都会用到df命令

[tommy@tommy-1 ~]$ df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda5             4.8G  389M  4.2G   9% /
/dev/sda7             271G  3.5G  254G   2% /home
/dev/sda3             4.8G  1.1G  3.5G  24% /usr
/dev/sda2             4.8G  199M  4.3G   5% /var
/dev/sda1              99M   18M   77M  19% /boot
tmpfs                 997M     0  997M   0% /dev/shm


这个df命令有个问题,即是磁盘的某个卷有问题,比如offline了
那么很有可能就是当你执行df命令的时候,就挂掉了,

在开发一个系统中,需要随时获得指定磁盘的剩余空间的功能
(如果使用df,很有可能会导致程序block在那里)

所以,我们这里使用python自带的statvfs模块来完成侦测磁盘剩余空间的功能

参考
http://docs.python.org/library/statvfs.html
http://docs.python.org/library/os.html

[mps@mps-1 ~]$ python
Python 2.4.3 (#1, Sep  3 2009, 15:37:37)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 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', 'F_FRSIZE', 'F_NAMEMAX', '__builtins__', '__doc__', '__file__', '__name__']
>>> available=vfs[statvfs.F_BAVAIL]*vfs[statvfs.F_BSIZE]/(1024*1024*1024)
>>> available
253
>>> capacity=vfs[statvfs.F_BLOCKS]*vfs[statvfs.F_BSIZE]/(1024*1024*1024)
>>> capacity
270
>>> used=capacity-available
>>> used
17
>>>
   发表时间:2010-04-15  
对这个不是很熟,回头看看API
0 请登录后投票
   发表时间:2010-04-16  
Deprecated since version 2.6: The statvfs module has been deprecated for removal in Python 3.0.
@see http://docs.python.org/library/statvfs.html
0 请登录后投票
   发表时间:2010-04-19  
恩,这个可能是设计上方向的问题,

不过,你可以看下 statvfs.py 库

如果你对linux的C熟悉的话,你就可以理解,这些都是一些标准定义罢了

"""Constants for interpreting the results of os.statvfs() and os.fstatvfs()."""

# Indices for statvfs struct members in the tuple returned by
# os.statvfs() and os.fstatvfs().

F_BSIZE   = 0           # Preferred file system block size
F_FRSIZE  = 1           # Fundamental file system block size
F_BLOCKS  = 2           # Total number of file system blocks (FRSIZE)
F_BFREE   = 3           # Total number of free blocks
F_BAVAIL  = 4           # Free blocks available to non-superuser
F_FILES   = 5           # Total number of file nodes
F_FFREE   = 6           # Total number of free file nodes
F_FAVAIL  = 7           # Free nodes available to non-superuser
F_FLAG    = 8           # Flags (see your local statvfs man page)
F_NAMEMAX = 9           # Maximum file name length
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics