2010-11-11 19 views
1

Je cherche un moyen d'obtenir tous les lecteurs locaux sur une machine Windows, Jusqu'à présent, j'ai essayé avec deux optionsComment obtenir une liste de lecteurs locaux sans ceux SUBST'rated en Python/Windows?

1)

# Win32Com 
from win32com.client import Dispatch 
import sys 

fso = Dispatch('Scripting.FileSystemObject') 
for drive in fso.Drives: 
    print drive, drive.DriveType 

2)

# win32api 
import win32api 
import win32file 
drives = (drive for drive in win32api.GetLogicalDriveStrings().split("\000") if drive) 
for drive in drives: 
    print drive, win32file.GetDriveType(drive) 

Cette deux façons fonctionne (presque) bien, je reçois ma liste de lecteur tels que:

A: 1 // Removable 
C: 2 // Fixed 
D: 2  
E: 2 
G: 2 // Fixed (??? SUBST'ed drive) 
I: 4 // Cd-Rom 
X: 3 // Network 

mais le lecteur G: est un lecteur SUBST'ed (par exemple: créé avec SUBST G: C: \ TEST), et je ne peux pas trouver le moyen de le différencier d'un lecteur local "réel".

Des idées?

TIA, Pablo

Répondre

1

Google me dit que si vous essayez et allez chercher un GUID pour un subst lecteur-ed il échouera:

>>> import win32file 
>>> win32file.GetVolumeNameForVolumeMountPoint("C:\\") 
'\\\\?\\Volume{50c800a9-c62e-11df-b5bb-806e6f6e6963}\\' 
>>> win32file.GetVolumeNameForVolumeMountPoint("K:\\") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
pywintypes.error: (87, 'GetVolumeNameForVolumeMountPoint', 
         'The parameter is incorrect.') 

Cela semble fonctionner, mais peut ne pas être fiable.

+0

@katrielaex: fonctionne bien pour moi jusqu'ici, thk – PabloG