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 

Но я не уверен, как это сделать, чтобы работать над окнами. Могу ли я предположить, что точкой монтирования является буква диска (например, C :)? Я считаю, что возможно иметь сетевое подключение в окнах, чтобы я мог также обнаружить это монтирование.

3 Solutions collect form web for “Python: получить точку монтирования в Windows или Linux”

Windows не использовала для вызова «точки монтирования» [ edit : теперь это делает, см. Ниже!], А два типичных / традиционных синтаксиса, которые вы можете найти для них, – это буква диска, например Z: или иначе \\hostname (с двумя ведущими обратными косыми чертами: убегайте осторожно или используйте r'...' нотацию в Python fpr такие литературные строки).

edit : поскольку поддерживаются точки монтирования NTFS 5.0, но согласно этому сообщению API для них находится в довольно состоянии – «сломанный и плохо документированный», говорится в заголовке сообщения. Возможно, выполнение поставляемого microsoft файла 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) 
  • Celery + Django: не удается запустить celerybeat в Windows 7
  • Python raw_input испортил конкатенацию строк
  • Почему python subprocess.Popen запускает подпроцесс через cmd.exe?
  • Запустить IPython-ноутбук с выбранным браузером
  • Сценарий python, который активирует virtualenv, а затем запускает другой скрипт python?
  • Установка среды python / sphinx на окна?
  • Функциональность Readline для окон с помощью python 2.7
  • Необходимо быстро создать большое количество новых процессов в Windows / Python
  •  
    Interesting Posts for Van-Lav

    Существуют ли библиотеки для упаковки и минимизации нескольких файлов CSS и JS в каждый файл?

    Python: как импортировать из файла __init__.py?

    Python: Рассчитайте тезисы Вороного из триангуляции дельфинов Сципи в 3D

    Почему группа «не захватывающих» регулярных выражений не работает

    Python: условные элементы в массиве

    Как получить сумму MD5 строки?

    Как заменить тире между символами пробелом с помощью регулярного выражения

    Экспорт проблем github в csv

    Uncaught ReferenceError: django не определен

    Как повторить фрагмент кода определенное количество раз в python

    Управление группами в pygame

    Должен ли я сделать код python менее надежным для улучшения удобочитаемости?

    Обертка фальш-склянки: фляга, кажется, блокирует нить

    Почему App Engine показывает разные результаты округления поплавка по сравнению с моей локальной машиной?

    Ссылка на Python на новый экземпляр, чередующийся

    Python - лучший язык программирования в мире.