SMB 共享上的可用磁盘空间(通过 Python)

发布于 2024-09-04 01:40:29 字数 203 浏览 5 评论 0原文

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

例如

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

Does anyone know a way to get the amount of space available on a Windows (Samba) share via Python 2.6 with its standard library? (also running on Windows)

e.g.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

删除会话 2024-09-11 01:40:29

如果 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。

If PyWin32 is available:

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

Where free is a amount of free space available to the current user, and totalfree is amount of free space total. Relevant documentation: PyWin32 docs, MSDN.

If PyWin32 is not guaranteed to be available, then for Python 2.5 and higher there is ctypes module in stdlib. Same function, using 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

Could probably be done better but I'm not really familiar with ctypes.

九公里浅绿 2024-09-11 01:40:29

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

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

The standard library has the os.statvfs() function, but unfortunately it's only available on Unix-like platforms.

In case there is some cygwin-python maybe it would work there?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文