Sejak Python 3.3, ada cara mudah dan langsung untuk melakukannya dengan pustaka standar:
$ 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
Angka-angka ini dalam byte. Lihat dokumentasi untuk info lebih lanjut.
Ini tidak memberikan nama partisi, tetapi Anda bisa mendapatkan statistik sistem file secara langsung menggunakan statvfs
Panggilan sistem Unix. Untuk memanggilnya dari Python, gunakan os.statvfs('/home/foo/bar/baz')
.
Bidang yang relevan dalam hasil, menurut 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.
Jadi untuk memahami nilainya, kalikan dengan 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)
Jika Anda hanya membutuhkan ruang kosong di perangkat, lihat jawabannya menggunakan os.statvfs()
di bawah.
Jika Anda juga memerlukan nama perangkat dan titik pemasangan yang terkait dengan file tersebut, Anda harus memanggil program eksternal untuk mendapatkan informasi ini. df
akan memberikan semua informasi yang Anda perlukan -- jika dipanggil sebagai df filename
itu mencetak baris tentang partisi yang berisi file tersebut.
Sebagai contoh:
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()
Perhatikan bahwa ini agak rapuh, karena bergantung pada format yang tepat dari df
output, tapi saya tidak mengetahui solusi yang lebih kuat. (Ada beberapa solusi yang mengandalkan /proc
sistem file di bawah yang bahkan kurang portabel daripada yang ini.)