python windows linux macos diskspace

Espacio multiplataforma restante en el volumen usando python



windows linux (11)

Si está ejecutando python3:

El uso de shutil.disk_usage() con os.path.realpath(''/'') nombre-regularización funciona:

from os import path from shutil import disk_usage print([i / 1000000 for i in disk_usage(path.realpath(''/''))])

O

total_bytes, used_bytes, free_bytes = disk_usage(path.realpath(''D://Users//phannypack'')) print(total_bytes / 1000000) # for Mb print(used_bytes / 1000000) print(free_bytes / 1000000)

dándote el espacio total, usado y libre en MB.

Necesito una forma de determinar el espacio que queda en un volumen de disco usando Python en Linux, Windows y OS X. Actualmente estoy analizando el resultado de varias llamadas al sistema (df, dir) para lograr esto, ¿hay alguna otra manera mejor?


A continuación, el código devuelve el valor correcto en Windows

import win32file def get_free_space(dirname): secsPerClus, bytesPerSec, nFreeClus, totClus = win32file.GetDiskFreeSpace(dirname) return secsPerClus * bytesPerSec * nFreeClus



Instala psutil usando pip install psutil . Luego puede obtener la cantidad de espacio libre en bytes usando:

import psutil print(psutil.disk_usage(".").free)


La función os.statvfs() es una mejor manera de obtener esa información para plataformas tipo Unix (incluido OS X). La documentación de Python dice "Disponibilidad: Unix", pero vale la pena comprobar si también funciona en Windows en tu compilación de Python (es decir, es posible que los documentos no estén actualizados).

De lo contrario, puede usar la biblioteca pywin32 para llamar directamente a la función GetDiskFreeSpaceEx .


No conozco ninguna forma de plataforma cruzada para lograr esto, pero tal vez una buena solución para usted sería escribir una clase contenedora que verifique el sistema operativo y use el mejor método para cada una.

Para Windows, existe el método GetDiskFreeSpaceEx en las extensiones de win32.


Puede usar df como una forma multiplataforma. Es una parte de las utilidades centrales de GNU . Estas son las utilidades principales que se espera que existan en todos los sistemas operativos. Sin embargo, no están instalados en Windows por defecto (Aquí, GetGnuWin32 es útil).

df es una utilidad de línea de comandos, por lo tanto, se requiere un contenedor para propósitos de scripting. Por ejemplo:

from subprocess import PIPE, Popen def free_volume(filename): """Find amount of disk space available to the current user (in bytes) on the file system containing filename.""" stats = Popen(["df", "-Pk", filename], stdout=PIPE).communicate()[0] return int(stats.splitlines()[1].split()[3]) * 1024


Puede usar el módulo wmi para windows y os.statvfs para Unix

para ventana

import wmi c = wmi.WMI () for d in c.Win32_LogicalDisk(): print( d.Caption, d.FreeSpace, d.Size, d.DriveType)

para Unix o Linux

from os import statvfs statvfs(path)


Si no desea agregar otra dependencia, puede usar ctypes para Windows para llamar directamente a la función win32.

import ctypes free_bytes = ctypes.c_ulonglong(0) ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(u''c://'), None, None, ctypes.pointer(free_bytes)) if free_bytes.value == 0: print ''dont panic''



import ctypes import os import platform import sys def get_free_space_mb(dirname): """Return folder/drive free space (in megabytes).""" if platform.system() == ''Windows'': free_bytes = ctypes.c_ulonglong(0) ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(dirname), None, None, ctypes.pointer(free_bytes)) return free_bytes.value / 1024 / 1024 else: st = os.statvfs(dirname) return st.f_bavail * st.f_frsize / 1024 / 1024

Tenga en cuenta que debe pasar un nombre de directorio para que GetDiskFreeSpaceEx() funcione ( statvfs() funciona tanto en archivos como en directorios). Puede obtener un nombre de directorio de un archivo con os.path.dirname() .

También vea la documentación para os.statvfs() y GetDiskFreeSpaceEx .