Finden freier Speicherplatz in Python auf OS / X
Frage
Ich suche nach der Anzahl der freien Bytes auf meinem HD, aber Schwierigkeiten haben dabei auf Python.
Ich habe versucht, die folgenden:
import os
stat = os.statvfs(path)
print stat.f_bsize * stat.f_bavail
Aber auf OS / X Es gibt mir ein 17529020874752 Bytes, die etwa 1,6 TB, die sehr schön wäre, aber leider nicht wirklich wahr.
Was ist der beste Weg, um diese Figur zu bekommen?
Lösung
Versuchen f_frsize
statt f_bsize
verwendet wird.
>>> 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% /
Andere Tipps
Unter 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)
Verbrauch:
>>> disk_usage('/')
usage(total=21378641920, used=7650934784, free=12641718272)
>>>
Für Windows können Sie verwenden psutil .
In Python 3.3 und oben shutil bietet Ihnen die gleiche Funktion
>>> import shutil
>>> shutil.disk_usage("/")
usage(total=488008343552, used=202575314944, free=260620050432)
>>>
Psutil Modul auch verwendet werden kann.
>>> psutil.disk_usage('/')
usage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)
können Dokumentation hier .
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
Es ist nicht betriebssystemunabhängig, aber das funktioniert unter Linux, und wahrscheinlich auf OS X als auch:
Drucken commands.getoutput ( 'df.). Split ( '\ n') [1] .split () [3]
Wie funktioniert es? Es wird die Ausgabe des ‚df.‘ Befehl, mit dem Sie Platteninformationen über die Teilung von denen gibt das aktuelle Verzeichnis ein Teil ist, teilt es sich in zwei Leitungen (so wie es auf dem Bildschirm ausgegeben wird), nimmt dann die zweite Zeile, dass (durch Anhängen von [1] nach dem erstes split ()), dann teilt , die Linie in verschiedenen Leerzeichen getrennte Stücke, und schließlich gibt Ihnen das vierte Element in dieser 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
Was ist los mit
import subprocess
proc= subprocess.Popen( "df", stdout=subprocess.PIPE )
proc.stdout.read()
proc.wait()