通过Python获取SMB共享的可用磁盘空间
有没有人知道怎么用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 不是很熟悉。