获取Python中的硬盘大小

Nis*_*sba 17 python hard-drive

我正在尝试使用Python获取硬盘大小和可用空间(我使用带有macOS的Python 2.7).

我正在尝试os.statvfs('/'),尤其是以下代码.我正在做的事情是否正确?giga我应该使用哪个变量定义?

import os

def get_machine_storage():
    result=os.statvfs('/')
    block_size=result.f_frsize
    total_blocks=result.f_blocks
    free_blocks=result.f_bfree
    # giga=1024*1024*1024
    giga=1000*1000*1000
    total_size=total_blocks*block_size/giga
    free_size=free_blocks*block_size/giga
    print('total_size = %s' % total_size)
    print('free_size = %s' % free_size)

get_machine_storage()
Run Code Online (Sandbox Code Playgroud)

编辑: statvfs在Python 3中已弃用,您知道其他选择吗?

Vas*_* G. 33

我在我的机器上运行它(Python 3.4):

import shutil

total, used, free = shutil.disk_usage("/")

print("Total: %d GiB" % (total // (2**30)))
print("Used: %d GiB" % (used // (2**30)))
print("Free: %d GiB" % (free // (2**30)))
Run Code Online (Sandbox Code Playgroud)

输出:

Total: 931 GiB
Used: 29 GiB
Free: 902 GiB
Run Code Online (Sandbox Code Playgroud)

编辑:适用于Python 3.6.

  • 仅从python 3.3开始 (7认同)
  • 很好的答案,但只以千兆字节为单位计算,“total”、“used”、“free”的大小可以是任何东西。如果你愿意,你可以尽可能使用 [hurry.filesize](https://pypi.python.org/pypi/hurry.filesize) 它会自动处理这个:) (4认同)
  • 这为您提供了*分区*的大小,而不是整个磁盘的大小。 (3认同)
  • @Wondercricket确实,每次需要不同的单位时,您都必须修改除数。谢谢你的推荐:) (2认同)

Fau*_*nco 13

https://pypi.python.org/pypi/psutil

import psutil

obj_Disk = psutil.disk_usage('/')

print (obj_Disk.total / (1024.0 ** 3))
print (obj_Disk.used / (1024.0 ** 3))
print (obj_Disk.free / (1024.0 ** 3))
print (obj_Disk.percent)
Run Code Online (Sandbox Code Playgroud)

  • 让我建议使用“float(1<<30)”而不是“(1024.0 ** 3)” (3认同)

len*_*nik 6

代码大致正确,但是您使用了错误的字段,这可能会在不同的系统上给您错误的结果。正确的方法是:

>>> os.system('df -k /')
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root       14846608 3247272  10945876  23% /

>>> disk = os.statvfs('/')
>>> (disk.f_bavail * disk.f_frsize) / 1024
10945876L
Run Code Online (Sandbox Code Playgroud)