Obtener el tamaño del disco duro en Python

Estoy tratando de obtener el tamaño del disco duro y el espacio libre usando Python (estoy usando Python 2.7 con macOS).

Estoy intentando con os.statvfs('/') , especialmente con el siguiente código. ¿Es correcto lo que estoy haciendo? ¿Qué definición de la variable 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() 

EDITAR: statvfs está en desuso en Python 3, ¿conoces alguna alternativa?

Python le proporciona el módulo shutil , que tiene una función disk_usage , que devuelve una tupla con nombre con las cantidades de espacio total, utilizado y libre en su disco duro.

Puede llamar a la función como se muestra a continuación y obtener toda la información sobre su espacio en disco:

 import shutil total, used, free = shutil.disk_usage("\\") print("Total: %d GB" % (total // (2**30))) print("Used: %d GB" % (used // (2**30))) print("Free: %d GB" % (free // (2**30))) 

Salida:

 Total: 931 GB Used: 29 GB Free: 902 GB 

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) 

La impresión del tipo puede ayudar, cuando no sabe cómo manejar el resultado de una función.

print type(os.statvfs('/')) devuelve

Eso significa que no es una instancia de clase integrada como una cadena o int ..

Puede verificar lo que puede hacer con esa instancia con dir(instance)

print dir(os.statvfs('/')) imprime todas sus propiedades, funciones, variables …

 ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'f_bavail', 'f_bfree', 'f_blocks', 'f_bsize', 'f_favail', 'f_ffree', 'f_files', 'f_flag', 'f_frsize', 'f_namemax', 'n_fields', 'n_sequence_fields', 'n_unnamed_fields'] 

Al acceder a una de las variables, como os.statvfs('/').f_ffree puede extraer un entero.

Verifique con el print type(os.statvfs('/').f_ffree) , imprime .