Comment puis-je obtenir le nom d’un lecteur en python

J’ai une liste de lettres de lecteur valides et je souhaite présenter un choix à l’utilisateur final. Je voudrais leur montrer les noms des lecteurs. Voici un code qui devrait me montrer le nom du lecteur F:\ :

 import ctypes kernel32 = ctypes.windll.kernel32 buf = ctypes.create_unicode_buffer(1024) kernel32.GetVolumeNameForVolumeMountPointW( ctypes.c_wchar_p("F:\\"), buf, ctypes.sizeof(buf) ) print buf.value 

Cependant, cela \\?\Volume{a8b6b3df-1a63-11e1-9f6f-0007e9ebdfbf}\ . Comment puis-je obtenir la chaîne que Windows affiche dans l’explorateur (par exemple, KINGSTON , pour un certain lecteur flash que je possède)?


MODIFIER:

Ne fonctionne toujours pas:

 volumeNameBuffer = ctypes.create_unicode_buffer(1024) fileSystemNameBuffer = ctypes.create_unicode_buffer(1024) kernel32.GetVolumeInformationW( ctypes.c_wchar_p("C:\\"), volumeNameBuffer, ctypes.sizeof(volumeNameBuffer), fileSystemNameBuffer, ctypes.sizeof(fileSystemNameBuffer) ) 

Cela me donne cette erreur:

 WindowsError: exception: access violation reading 0x3A353FA0 

Essayez GetVolumeInformation fonction GetVolumeInformation . Il renvoie directement l’étiquette de volume.

Pourquoi n’utilisez-vous pas win32api.GetVolumeInformation?

 import win32api win32api.GetVolumeInformation("C:\\") 

les sorties

 ('WINDOWS', 1992293715, 255, 65470719, 'NTFS') 

En utilisant le fragment ci-dessus, j’ai rempli les arguments manquants (facultatifs, null) comme une aide rapide:

 import ctypes kernel32 = ctypes.windll.kernel32 volumeNameBuffer = ctypes.create_unicode_buffer(1024) fileSystemNameBuffer = ctypes.create_unicode_buffer(1024) serial_number = None max_component_length = None file_system_flags = None rc = kernel32.GetVolumeInformationW( ctypes.c_wchar_p("F:\\"), volumeNameBuffer, ctypes.sizeof(volumeNameBuffer), serial_number, max_component_length, file_system_flags, fileSystemNameBuffer, ctypes.sizeof(fileSystemNameBuffer) ) print volumeNameBuffer.value print fileSystemNameBuffer.value 

Cela devrait pouvoir être copié-collé.

Vous pouvez exécuter Windows Shell cmd et parsingr le résultat.

 import subprocess def getDriveName(driveletter): return subprocess.check_output(["cmd","/c vol "+driveletter]).split("\r\n")[0].split(" ").pop() print getDriveName("d:") 

Cela fonctionne dans Python 2.7