Python 2:从驱动器号获取网络共享路径

时间:2017-07-07 12:24:33

标签: python python-2.7 unc network-share

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

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

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

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

3 个答案:

答案 0 :(得分:10)

使用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

答案 1 :(得分:2)

使用ctypes以及此帖中第一个答案中显示的代码: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))

答案 2 :(得分:1)

这是在≥3.4的python中没有依赖关系的方法!*

from pathlib import Path

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

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