J'essaie d'obtenir la taille du disque dur et l'espace libre en utilisant Python (J'utilise Python 2.7 avec macOS).
J'essaie avec os.statvfs('/')
, en particulier avec le code suivant. Est-ce correct ce que je fais? Quelle définition de la variable giga
dois-je utiliser?
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()
EDIT: statvfs
est obsolète dans Python 3, connaissez-vous une alternative?
Python vous fournit le module shutil
, qui a un disk_usage
fonction, renvoyant un tuple nommé avec les quantités d’espace total, utilisé et disponible sur votre disque dur.
Vous pouvez appeler la fonction comme ci-dessous et obtenir toutes les informations sur l'espace de votre disque:
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)))
Sortie:
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)
Le code est à peu près correct, mais vous utilisez des champs incorrects, ce qui peut vous donner des résultats erronés sur un système différent. La bonne façon serait:
>>> 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
Imprimer le type peut aider, quand vous ne savez pas comment gérer le résultat d'une fonction.
print type(os.statvfs('/'))
renvoie <type 'posix.statvfs_result'>
Cela signifie que ce n'est pas une instance de classe intégrée comme une chaîne ou un int ..
Vous pouvez vérifier ce que vous pouvez faire avec cette instance avec dir(instance)
print dir(os.statvfs('/'))
affiche toutes les propriétés, fonctions, 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']
En accédant à l'une des variables, comme os.statvfs('/').f_ffree
, vous pouvez extraire un entier.
Vérifiez deux fois avec print type(os.statvfs('/').f_ffree)
, il affiche <type 'int'>
.