Od Pythonu 3.3 existuje snadný a přímý způsob, jak toho dosáhnout pomocí standardní knihovny:
$ 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
Tato čísla jsou v bajtech. Další informace naleznete v dokumentaci.
Toto neuvádí název oddílu, ale statistiky souborového systému můžete získat přímo pomocí statvfs
Systémové volání Unix. Chcete-li jej volat z Pythonu, použijte os.statvfs('/home/foo/bar/baz')
.
Příslušná pole ve výsledku podle 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.
Aby hodnoty měly smysl, vynásobte 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)
Pokud potřebujete pouze volné místo v zařízení, podívejte se na odpověď pomocí os.statvfs()
níže.
Pokud potřebujete také název zařízení a přípojný bod spojený se souborem, měli byste zavolat externí program, abyste získali tyto informace. df
poskytne všechny informace, které potřebujete -- když je voláno jako df filename
vypíše řádek o oddílu, který obsahuje soubor.
Uvedu příklad:
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()
Všimněte si, že je to poněkud křehké, protože závisí na přesném formátu df
výstup, ale nejsem si vědom robustnějšího řešení. (Existuje několik řešení založených na /proc
souborový systém níže, které jsou ještě méně přenosné než tento.)