Доступное дисковое пространство на общем SMB-ресурсе через Python - PullRequest
2 голосов
/ 04 июня 2010

Кто-нибудь знает способ получить объем пространства, доступного на общем ресурсе Windows (Samba) через Python 2.6 с его стандартной библиотекой? (также работает в Windows)

, например

>>> os.free_space("\\myshare\folder") # return free disk space, in bytes
1234567890

Ответы [ 2 ]

8 голосов
/ 04 июня 2010

Если доступно PyWin32 :

free, total, totalfree = win32file.GetDiskFreeSpaceEx(r'\\server\share')

Где free - количество свободного места, доступное текущему пользователю, а totalfree - общее количество свободного пространства. Соответствующая документация: Документы PyWin32 , MSDN .

Если PyWin32 не гарантированно будет доступен, то для Python 2.5 и выше в stdlib есть модуль ctypes . Та же функция, используя ctypes:

import sys
from ctypes import *

c_ulonglong_p = POINTER(c_ulonglong)

_GetDiskFreeSpace = windll.kernel32.GetDiskFreeSpaceExW
_GetDiskFreeSpace.argtypes = [c_wchar_p, c_ulonglong_p, c_ulonglong_p, c_ulonglong_p]

def GetDiskFreeSpace(path):
    if not isinstance(path, unicode):
        path = path.decode('mbcs') # this is windows only code
    free, total, totalfree = c_ulonglong(0), c_ulonglong(0), c_ulonglong(0)
    if not _GetDiskFreeSpace(path, pointer(free), pointer(total), pointer(totalfree)):
        raise WindowsError
    return free.value, total.value, totalfree.value

Возможно, это можно сделать лучше, но я не очень разбираюсь в ctypes.

0 голосов
/ 04 июня 2010

Стандартная библиотека имеет функцию os.statvfs (), но, к сожалению, она доступна только на Unix-подобных платформах.

В случае, если есть какой-нибудь cygwin-python, возможно, он будет работать там?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...