Мне нужен способ определить пространство, оставшееся на томе диска, используя python для Linux, Windows и OS X. В настоящее время я разбираю выходные данные различных системных вызовов (df, dir), чтобы достичь этого - есть ли лучший способ?Кроссплатформенное пространство, оставшееся на томе с использованием python
ответ
Функция os.statvfs() - лучший способ получить эту информацию для Unix-подобных платформ (включая OS X). В документации на Python говорится: «Доступность: Unix», но стоит ли проверять, работает ли она на Windows в вашей сборке Python (то есть документы могут не обновляться).
В противном случае вы можете использовать библиотеку pywin32 для прямого вызова функции GetDiskFreeSpaceEx.
os.statvfs() не работает в Windows (Python 2.5.2 - текущая производственная версия). – jfs 2008-09-29 22:33:53
не перекрестная платформа – pufferfish 2010-04-19 16:12:37
Я не знаю какого-либо кросс-платформенного способа достижения этого, но, возможно, хорошим решением для вас было бы написать класс-оболочку, который проверяет операционную систему и использует лучший метод для каждого.
Для Windows существует метод GetDiskFreeSpaceEx в расширениях win32.
Вы можете использовать df как кросс-платформенный способ. Он входит в состав GNU core utilities. Это основные утилиты, которые, как ожидается, будут существовать в каждой операционной системе. Однако они по умолчанию не установлены в Windows (здесь полезно использовать GetGnuWin32).
df - утилита командной строки, поэтому для сценариев требуется оболочка. Например:
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
Я не понимаю, почему люди сбиты. Например, этот ответ может быть полезен кому-то. Во всяком случае, это хорошее дополнение для других кукольно-питонических решений. Если кому-то не нравится ответ, нет причин его понижать. Насколько я понимаю, downvotes для совершенно неправильных ответов. Это не так. – ovgolovin 2014-04-28 19:15:19
@ovgolovin Назовите этот ответ, и хорошо знать другой способ сделать то же самое. – Erxin 2015-04-24 03:05:25
Если вы не хотите добавить другую зависимость вы можете для окон использовать ctypes вызвать вызов функции 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'
кросс-платформу ?? – pufferfish 2010-04-19 16:12:13
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
Обратите внимание, что вы должны передать имя каталога для GetDiskFreeSpaceEx()
работы (statvfs()
работы на обоих файлов и каталогов). Вы можете получить имя каталога из файла с os.path.dirname()
.
Также см. Документацию для os.statvfs()
и GetDiskFreeSpaceEx
.
`.f_bfree` - общее количество свободных блоков в файловой системе. Его нужно умножить на `.f_bsize`, чтобы получить количество байтов. – jfs 2010-04-25 16:14:55
По крайней мере, на OS X Lion/Python 2.7 Я заметил, что умножение на `.f_bsize` дает слишком большое значение, так как` f_bsize` является * предпочтительным размером блока, а `.f_frsize` является * основным размером блока и дает правильное значение. В моей тестовой системе linux оба значения идентичны, и поэтому `.f_frsize` должен работать все время. – 2011-11-30 08:34:12
Хороший кросс-платформенный способ использования psutil: http://pythonhosted.org/psutil/#disks (Обратите внимание, что вам понадобится psutil 0.3.0 или выше).
Вы можете использовать wmi модуль для окон и os.statvfs для UNIX
для окна
import wmi
c = wmi.WMI()
for d in c.Win32_LogicalDisk():
print(d.Caption, d.FreeSpace, d.Size, d.DriveType)
для UNIX или Linux
from os import statvfs
statvfs(path)
Установка psutil с помощью pip install psutil
.Тогда вы можете получить количество свободного пространства в байтах, используя:
import psutil
print(psutil.disk_usage(".").free)
Ниже код возвращает правильное значение на окнах
import win32file
def get_free_space(dirname):
secsPerClus, bytesPerSec, nFreeClus, totClus = win32file.GetDiskFreeSpace(dirname)
return secsPerClus * bytesPerSec * nFreeClus
Из Python 3.3 вы можете использовать shutil.disk_usage("/").free из стандартной библиотеки как для Windows, и UNIX:)
Если вы работаете python3:
Использование shutil.disk_usage()
с os.path.realpath('/')
имя-регуляризация работы:
from os import path
from shutil import disk_usage
print([i/1000000 for i in disk_usage(path.realpath('/'))])
Или
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)
дает вам общую, использованную & свободного пространства в мегабайтах.
- 1. ImageView Заполнить оставшееся пространство
- 2. Заполните все оставшееся пространство
- 3. CSS занимает оставшееся пространство
- 4. Как заполнить оставшееся пространство
- 5. Заполните оставшееся пространство (CSS)
- 6. Кроссплатформенное высокоточное время в python
- 7. div заполнить оставшееся пространство экрана
- 8. средний div занял оставшееся пространство?
- 9. проверить оставшееся пространство в ОЗУ на Windows?
- 10. Bootstrap - заполнить оставшееся вертикальное пространство
- 11. заполнить Div Оставшееся горизонтальное пространство
- 12. Как сделать оставшееся вертикальное пространство?
- 13. Событие onclick включает оставшееся пространство
- 14. Android: EditText вытащить оставшееся пространство
- 15. Подача оставшееся пространство формы входов
- 16. DIV, чтобы заполнить оставшееся пространство
- 17. Сделать вход занимает оставшееся пространство?
- 18. make div заполнить оставшееся пространство
- 19. заполнить оставшееся пространство с шириной div auto
- 20. Заполните оставшееся пространство с помощью Flexbox
- 21. Кроссплатформенное исправление
- 22. Как получить свободное пространство на томе диска без буквы?
- 23. Как удалить оставшееся пространство после использования string.Replace ("-", "")
- 24. Рассчитать оставшееся место на диске на Android с помощью Python
- 25. Разделите оставшееся пространство между двумя табличными ячейками
- 26. Рамка Tkinter не заполняет оставшееся пространство
- 27. Как сделать ящики (div's) заполнить оставшееся пространство
- 28. jquery mobile select fo заполнить оставшееся пространство
- 29. Как сделать вид андроида взять оставшееся пространство
- 30. Позвольте изображению взять только оставшееся пространство
Просмотреть этот рецепт здесь: http://code.activestate.com/recipes/577972-disk-usage/?in=user-4178764 – 2012-07-10 17:46:31