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 debo usar?
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?
Aviso : como algunas personas mencionaron en la sección de comentarios, esta solución funcionará para Python 3.3 y superior. Para Python 2.7 , es mejor usar la biblioteca psutil , que tiene una función disk_usage , que contiene información sobre el espacio en disco total , usado y libre :
import psutil hdd = psutil.disk_usage('/') print ("Total: %d GiB" % hdd.total / (2**30)) print ("Used: %d GiB" % hdd.used / (2**30)) print ("Free: %d GiB" % hdd.free / (2**30)) Para Python 3.3 y superior, puede usar el módulo shutil , que tiene una función disk_usage , que devuelve una tupla con nombre con las cantidades de espacio total, usado y libre en su disco duro.
Puede llamar a la función de la siguiente manera y obtener toda la información sobre el espacio de su disco:
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)))Producción:
Total: 931 GiB Used: 29 GiB Free: 902 GiBhttps://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)El código es correcto, pero está utilizando campos incorrectos, lo que puede generar resultados incorrectos en un sistema diferente. La forma correcta sería:
>>> 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