A partir de Python 3.3, existe una forma sencilla y directa de hacerlo con la biblioteca estándar:
$ 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
Estos números están en bytes. Consulte la documentación para obtener más información.
Esto no proporciona el nombre de la partición, pero puede obtener las estadísticas del sistema de archivos directamente usando statvfs
Llamada al sistema Unix. Para llamarlo desde Python, use os.statvfs('/home/foo/bar/baz')
.
Los campos relevantes en el resultado, según 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.
Entonces, para dar sentido a los valores, multiplique por 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)
Si solo necesita el espacio libre en un dispositivo, vea la respuesta usando os.statvfs()
a continuación.
Si también necesita el nombre del dispositivo y el punto de montaje asociado con el archivo, debe llamar a un programa externo para obtener esta información. df
proporcionará toda la información que necesita, cuando se le llame como df filename
imprime una línea sobre la partición que contiene el archivo.
Para dar un ejemplo:
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()
Tenga en cuenta que esto es bastante frágil, ya que depende del formato exacto del df
salida, pero no conozco una solución más robusta. (Hay algunas soluciones que se basan en el /proc
sistema de archivos a continuación que son incluso menos portátiles que este.)