Trouver un espace disque libre en python sur OS / X
Question
Je cherche le nombre d'octets libres sur mon HD, mais ont du mal à le faire sur python.
Je l'ai essayé ce qui suit:
import os
stat = os.statvfs(path)
print stat.f_bsize * stat.f_bavail
Mais, OS / X il me donne un 17529020874752 octets, qui est d'environ 1,6 To, ce qui serait très bien, mais malheureusement pas vraiment vrai.
Quelle est la meilleure façon d'arriver à ce chiffre?
La solution
Essayez d'utiliser f_frsize
au lieu de 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% /
Autres conseils
Sous 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)
Utilisation:
>>> disk_usage('/')
usage(total=21378641920, used=7650934784, free=12641718272)
>>>
Pour Windows vous pouvez utiliser psutil .
En Python 3.3 et au-dessus shutil vous offre la même fonctionnalité
>>> import shutil
>>> shutil.disk_usage("/")
usage(total=488008343552, used=202575314944, free=260620050432)
>>>
psutil Module peut également être utilisé.
>>> psutil.disk_usage('/')
usage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)
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
Il est pas OS indépendant, mais cela fonctionne sur Linux, et probablement sur OS X ainsi:
commands.getoutput impression ( 'df'.). Split ( '\ n') [1] .split () [3]
Comment ça marche? Il obtient la sortie de la « df ». commande, les informations que vous donne disque de la partition dont le répertoire en cours est une partie, se divise en deux lignes (comme il est imprimé à l'écran), puis prend la deuxième ligne de ce (en annexant [1] après la première division ()), se divise alors que ligne en différents morceaux séparés par des espaces, et, enfin, vous donne le 4ème élément dans cette liste.
>>> 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
Quel est le problème avec
import subprocess
proc= subprocess.Popen( "df", stdout=subprocess.PIPE )
proc.stdout.read()
proc.wait()