【问题标题】:Available disk space on an SMB share, via PythonSMB 共享上的可用磁盘空间,通过 Python
【发布时间】:2010-06-04 11:03:21
【问题描述】:

有谁知道通过 Python 2.6 及其标准库获取 Windows (Samba) 共享上可用空间量的方法? (也可以在 Windows 上运行)

例如

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

【问题讨论】:

    标签: python windows samba


    【解决方案1】:

    如果PyWin32 可用:

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

    free 是当前用户可用的可用空间量,totalfree 是可用空间总量。相关文档:PyWin32 docsMSDN

    如果不保证 PyWin32 可用,那么对于 Python 2.5 及更高版本,stdlib 中有 ctypes module。相同的功能,使用 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 不是很熟悉。

    【讨论】:

    • 仅供参考:python 3.3 将 shutil.disk_usage() 引入 stdlib 提供上述功能。
    【解决方案2】:

    标准库有 os.statvfs() 函数,但不幸的是它只在类 Unix 平台上可用。

    如果有一些 cygwin-python 也许它会在那里工作?

    【讨论】:

    • 很遗憾没有,用户只有标准的 2.5/2.6 Windows 安装,仅此而已。
    • @Dave:好吧,那你运气不好。虽然我认为拼凑一些东西应该不会太难,例如在标准子流程模块的帮助下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    • 2018-06-18
    • 2019-12-12
    • 1970-01-01
    相关资源
    最近更新 更多