Python2:从盘符获取网络共享路径

Python 2: Get network share path from drive letter

如果我使用以下命令获取所有已连接驱动器的列表:

available_drives = ['%s:' % d for d in string.ascii_uppercase if os.path.exists('%s:' % d)]

如何获取已连接驱动器的 UNC 路径?

os.path 只是 returns z:\ 而不是 \share\that\was\mapped\to\z

使用 ctypes 和此 post 中第一个答案中显示的代码:Get full computer name from a network drive letter in python,可以获得每个网络驱动器或选定的几个驱动器的驱动器路径.

如果驱动器不是网络驱动器,无论是本地驱动器还是可移动驱动器,给定的 get_connection 函数将抛出错误,这可以用

来解释
# your drive list
available_drives = ['%s:' % d for d in string.ascii_uppercase if os.path.exists('%s:' % d)]
for drive in available_drives:
    try:
        # function from linked post
        print(get_connection(drive))
    except WindowsError: # thrown from local drives
        print('{} is a local drive'.format(drive))

使用 pywin32 中的 win32wnet 来转换您的驱动器号。例如:

import win32wnet
import sys

print(win32wnet.WNetGetUniversalName(sys.argv[1], 1))

当我 运行 它时,这给了我这样的东西:

C:\test>python get_unc.py i:\some\path
\machine\test_share\some\path

以下是在 python ≥ 3.4 中的操作方法,没有依赖项!*

from pathlib import Path

def unc_drive(file_path):
    return str(Path(file_path).resolve())

*注:我刚刚发现这种方法失败的情况。我公司的网络共享之一具有权限设置,因此此方法引发 PermissionError。在这种情况下,win32wnet.WNetGetUniversalName 是一个合适的后备方案。