通过Python获取SMB共享的可用磁盘空间

2 投票
2 回答
3056 浏览
提问于 2025-04-15 23:33

有没有人知道怎么用Python 2.6的标准库来获取Windows(Samba)共享文件夹的可用空间?(也在Windows上运行)

例如:

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

2 个回答

0

标准库里有一个叫做 os.statvfs() 的函数,但可惜的是,它只在类Unix的平台上可用。

如果有一些 cygwin-python,可能在那上面可以用吗?

8

如果你有PyWin32这个库的话,可以这样做:

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

这里的 free 是当前用户可以使用的空闲空间大小,而 totalfree 是总的空闲空间大小。相关的文档可以参考:PyWin32 文档MSDN

如果不确定是否能使用 PyWin32,那么在 Python 2.5 及更高版本中,可以使用标准库里的 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 不是很熟悉。

撰写回答