Python:在Windows或Linux上获取挂载点

我需要一个函数来确定一个目录是否是一个驱动器的挂载点。 我发现这个代码已经适用于linux:

def getmount(path): path = os.path.abspath(path) while path != os.path.sep: if os.path.ismount(path): return path path = os.path.abspath(os.path.join(path, os.pardir)) return path 

但我不知道如何得到这个在Windows上工作。 我可以假设挂载点是驱动器号(例如C :)吗? 我相信有可能在Windows上有一个networking挂载,所以我希望能够检测到挂载。

Solutions Collecting From Web of "Python:在Windows或Linux上获取挂载点"

Windows并没有用它们叫做“挂载点”[ 编辑 :它现在做,看下面!],你可以找到的两个典型/传统的语法是一个驱动器号,例如Z: ,否则\\hostname (带有两个前导反斜杠:小心转义或在Python中使用r'...'表示法这样的文字字符串)。

编辑 :由于支持NTFS 5.0挂载点,但根据这篇文章 ,他们的API处于相当的状态 – “破损和不良记录”, 这篇文章的标题说。 也许执行微软提供的mountvol.exe是最痛苦的方式 – mountvol drive:path /L应该为指定的路径发出挂载的卷名,或者mountvol列出所有这些挂载(我必须说“应该”因为我现在无法检查)。 你可以用subprocess.Popen执行它并检查它的输出。

你想找到挂载点,或者只是确定它是否是挂载点?

无论如何,如上所述,在WinXP中可以将逻辑驱动器映射到文件夹。

详情请看这里: http : //www.modzone.dk/forums/showthread.php?threadid=278

我会尝试win32api.GetVolumeInformation

 >>> import win32api >>> win32api.GetVolumeInformation("C:\\") ('LABEL', 1280075370, 255, 459007, 'NTFS') >>> win32api.GetVolumeInformation("D:\\") ('CD LABEL', 2137801086, 110, 524293, 'CDFS') >>> win32api.GetVolumeInformation("C:\\TEST\\") # same as D: ('CD LABEL', 2137801086, 110, 524293, 'CDFS') >>> win32api.GetVolumeInformation("\\\\servername\\share\\") ('LABEL', -994499922, 255, 11, 'NTFS') >>> win32api.GetVolumeInformation("C:\\WINDOWS\\") # not a mount point Traceback (most recent call last): File "<stdin>", line 1, in <module> pywintypes.error: (144, 'GetVolumeInformation', 'The directory is not a subdirectory of the root directory.') 

这里是一些代码来返回一个驱动器号指向的UNC路径。 我想有一个更光滑的方法来做到这一点,但我想我会贡献我的一小部分。

 import sys,os,string,re,win32file for ch in string.uppercase: # use all uppercase letters, one at a time dl = ch + ":" try: flds = win32file.QueryDosDevice(dl).split("\x00") except: continue if re.search('^\\\\Device\\\\LanmanRedirector\\\\',flds[0]): flds2 = flds[0].split(":") st = flds2[1] n = st.find("\\") path = st[n:] print(path)