Ab Python 3.3 gibt es dafür eine einfache und direkte Möglichkeit mit der Standardbibliothek:
$ cat free_space.py
#!/usr/bin/env python3
import shutil
total, used, free = shutil.disk_usage(__file__)
print(total, used, free)
$ ./free_space.py
1007870246912 460794834944 495854989312
Diese Zahlen sind in Byte. Weitere Informationen finden Sie in der Dokumentation.
Dies gibt nicht den Namen der Partition an, aber Sie können die Dateisystemstatistiken direkt mit statvfs
abrufen Unix-Systemaufruf. Um es von Python aus aufzurufen, verwenden Sie os.statvfs('/home/foo/bar/baz')
.
Die relevanten Felder im Ergebnis laut POSIX:
unsigned long f_frsize Fundamental file system block size. fsblkcnt_t f_blocks Total number of blocks on file system in units of f_frsize. fsblkcnt_t f_bfree Total number of free blocks. fsblkcnt_t f_bavail Number of free blocks available to non-privileged process.
Um die Werte zu verstehen, multipliziere also mit f_frsize
:
import os
statvfs = os.statvfs('/home/foo/bar/baz')
statvfs.f_frsize * statvfs.f_blocks # Size of filesystem in bytes
statvfs.f_frsize * statvfs.f_bfree # Actual number of free bytes
statvfs.f_frsize * statvfs.f_bavail # Number of free bytes that ordinary users
# are allowed to use (excl. reserved space)
Wenn Sie nur den freien Speicherplatz auf einem Gerät benötigen, sehen Sie sich die Antwort mit os.statvfs()
an unten.
Wenn Sie auch den mit der Datei verknüpften Gerätenamen und Einhängepunkt benötigen, sollten Sie ein externes Programm aufrufen, um diese Informationen zu erhalten. df
liefert alle Informationen, die Sie benötigen -- wenn es als df filename
aufgerufen wird es gibt eine Zeile über die Partition aus, die die Datei enthält.
Um ein Beispiel zu geben:
import subprocess
df = subprocess.Popen(["df", "filename"], stdout=subprocess.PIPE)
output = df.communicate()[0]
device, size, used, available, percent, mountpoint = \
output.split("\n")[1].split()
Beachten Sie, dass dies ziemlich spröde ist, da es vom genauen Format des df
abhängt Ausgabe, aber mir ist keine robustere Lösung bekannt. (Es gibt einige Lösungen, die sich auf /proc
stützen Dateisystem unten, die noch weniger portabel sind als dieses.)