在OS / X上的python中查找可用磁盘空间

时间:2009-04-24 22:17:32

标签: python diskspace

我正在寻找我的HD上的空闲字节数,但是在python上这样做很麻烦。

我尝试了以下内容:

import os

stat = os.statvfs(path)
print stat.f_bsize * stat.f_bavail

但是,在OS / X上它给了我一个17529020874752字节,大约是1.6 TB,这将是非常好的,但不幸的是不是真的。

达到这个数字的最佳方法是什么?

7 个答案:

答案 0 :(得分:37)

尝试使用f_frsize代替f_bsize

>>> s = os.statvfs('/')
>>> (s.f_bavail * s.f_frsize) / 1024
23836592L
>>> os.system('df -k /')
Filesystem   1024-blocks     Used Available Capacity  Mounted on
/dev/disk0s2   116884912 92792320  23836592    80%    /

答案 1 :(得分:19)

在UNIX上:

import os
from collections import namedtuple

_ntuple_diskusage = namedtuple('usage', 'total used free')

def disk_usage(path):
    """Return disk usage statistics about the given path.

    Returned valus is a named tuple with attributes 'total', 'used' and
    'free', which are the amount of total, used and free space, in bytes.
    """
    st = os.statvfs(path)
    free = st.f_bavail * st.f_frsize
    total = st.f_blocks * st.f_frsize
    used = (st.f_blocks - st.f_bfree) * st.f_frsize
    return _ntuple_diskusage(total, used, free)

用法:

>>> disk_usage('/')
usage(total=21378641920, used=7650934784, free=12641718272)
>>>

对于Windows,您可以使用psutil

答案 2 :(得分:9)

在python 3.3及更高版本中,shutil为您提供了相同的功能

>>> import shutil
>>> shutil.disk_usage("/")
usage(total=488008343552, used=202575314944, free=260620050432)
>>> 

答案 3 :(得分:4)

Psutil module 也可以使用。

>>> psutil.disk_usage('/')
usage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)

文档可以找到here

答案 4 :(得分:0)

def FreeSpace(drive):
    """ Return the FreeSape of a shared drive in bytes"""
    try:
        fso = com.Dispatch("Scripting.FileSystemObject")
        drv = fso.GetDrive(drive)
        return drv.FreeSpace
    except:
        return 0

答案 5 :(得分:-1)

它不是独立于操作系统的,但这适用于Linux,也可能适用于OS X:

print commands.getoutput('df。')。split('\ n')[1] .split()[3]

它是如何工作的?它获得'df'的输出。命令,它为您提供有关当前目录所属分区的磁盘信息,将其分成两行(就像它打印到屏幕上一样),然后取第二行(通过在[...]之后附加[1]首先split()),然后将那条行拆分成不同的空格分隔的部分,最后,为你提供该列表中的第4个元素。

>>> commands.getoutput('df .')
'Filesystem           1K-blocks      Used Available Use% Mounted on\n/dev/sda3             80416836  61324872  15039168  81% /'

>>> commands.getoutput('df .').split('\n')
['Filesystem           1K-blocks      Used Available Use% Mounted on', '/dev/sda3             80416836  61324908  15039132  81% /']

>>> commands.getoutput('df .').split('\n')[1]
'/dev/sda3             80416836  61324908  15039132  81% /'

>>> commands.getoutput('df .').split('\n')[1].split()
['/dev/sda3', '80416836', '61324912', '15039128', '81%', '/']

>>> commands.getoutput('df .').split('\n')[1].split()[3]
'15039128'

>>> print commands.getoutput('df .').split('\n')[1].split()[3]
15039128

答案 6 :(得分:-5)

有什么问题
import subprocess
proc= subprocess.Popen( "df", stdout=subprocess.PIPE )
proc.stdout.read()
proc.wait()