2017-07-07 10 views
10

Jeśli użyję następujących czynności, aby uzyskać listę wszystkich podłączonych dysków:Python 2: Uzyskaj ścieżkę udziału sieciowego z literą napędu

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

Jak mogę uzyskać ścieżkę UNC podłączonych dysków?

os.path prostu zwraca z:\ zamiast

+0

Uwaga: Nie próbowałem wykonywania tego. https://docs.python.org/2/library/os.path.html Na tej podstawie "Note On Windows, wiele z tych funkcji nie obsługuje poprawnie nazw ścieżek UNC, a splitunc() i ismount() obsługują je poprawnie ". os.path.splitunc (path) Podział ścieżki pathname na parę (unc, reszta), tak aby unc był punktem montowania UNC (np. r '\\ host \ mount'), jeśli jest obecny, i resztą pozostałej części ścieżka (na przykład r '\ ścieżka \ plik.ekst "). Dla ścieżek zawierających litery dysków, unc zawsze będzie pustym ciągiem znaków. – prashanth

+0

Wypróbuj następującą bibliotekę w poście na blogu. http://developer.covenanteyes.com/unc-paths-with-python/ Link do biblioteki http://covenanteyes.github.io/py_win_unc/ – prashanth

+0

był jakiś czas odkąd to zrobiłem, ale Iirc tak jak znalazłem jest wywołanie 'net show' (sp?) i przeanalizowanie danych wyjściowych ... nie ma w pobliżu żadnego komputera z systemem Windows, aby wypróbować teraz ... –

Odpowiedz

6

Zastosowanie win32wnet z pywin32 konwertować litery dysków. Na przykład:

import win32wnet 
import sys 

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

To daje mi coś takiego, gdy uruchomię go:

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

Korzystanie ctypes i kod pokazany w pierwszej odpowiedzi w tym wątku: Get full computer name from a network drive letter in python, jest możliwe, aby uzyskać ścieżek dysków dla każdego dysku sieciowym lub wybranej mało.

get_connection funkcja podana wygeneruje błąd, jeśli dysk nie jest dyskiem sieciowym, napędy bądź lokalne lub wymienne, może to być rozliczane z

# 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)) 
Powiązane problemy