Python - 获取网络路径文件夹的大小

时间:2017-12-05 11:52:28

标签: python

我使用Python 2.7来监控在Windows 2012服务器上运行的某些应用程序的磁盘使用情况。如何获取某个网络存储文件夹的大小,例如:

\\storage\my_folder\

我试图使用(来自这篇文章:calculating-a-directory-size-using-python):

import os

def getFolderSize(folder):
    total_size = os.path.getsize(folder)
    for item in os.listdir(folder):
        itempath = os.path.join(folder, item)
        if os.path.isfile(itempath):
            total_size += os.path.getsize(itempath)
        elif os.path.isdir(itempath):
            total_size += getFolderSize(itempath)
    return total_size

但当然不支持网络路径。

2 个答案:

答案 0 :(得分:1)

如果它是2012(Windows)服务器,您可以使用SMB。

这是我刚刚用来获取Windows服务器上共享文件夹大小的小型测试程序。我还没有详尽地测试它,所以它可能需要一些工作,但它应该为你提供工作的基础。

它使用pysmb

from smb import SMBConnection

sep = '\\'

def RecursiveInspector(conn, shareName, path):
    #print path.encode('utf8')
    localSize = 0
    response = conn.listPath(shareName, path, timeout=30)
    for i in range(len(response)):
        fname = response[i].filename
        if (fname == ".") or (fname == ".."):
            continue
        if (response[i].isDirectory):
            dname = path
            if not (path.endswith(sep)):
                dname += sep
            dname += fname
            localSize += RecursiveInspector(conn, shareName, dname)
        else:
            localSize += response[i].file_size
    return localSize

conn = SMBConnection.SMBConnection("my_username",
                                   "my_password",
                                   "laptop",
                                   "the_shared_folder_name",
                                   use_ntlm_v2 = True)
conn.connect("1.2.3.4", 139)

path      = sep # start at root
totalSize = RecursiveInspector(conn, "the_shared_folder_name", path)

print totalSize

希望这可能有用。

答案 1 :(得分:0)

感谢post使用win32com.client让我获得网络文件夹的大小!