Voici ce que j'ai jusqu'à présent:
import os.path as op for d in map(chr, range(98, 123)): #drives b-z if not op.isdir(d + ':/'): continue
7 Réponses :
Pour désactiver la fenêtre contextuelle d'erreur, vous devez définir le drapeau d'erreur SEM_FailCriticalErrors CODE> Windows à l'aide de PYWIN:
old_mode = win32api.SetErrorMode(0)
SEM_FAILCRITICALERRORS = 1 # not provided by PyWin, last I checked
win32api.SetErrorMode(old_mode & 1)
Malheureusement, bien que je testais cela sur Windows 7, j'essaie de faire cette plate-forme de script. De plus, on dirait que le Win32API a besoin d'une construction différente selon le type de processeur que vous avez et je devrais installer chacune de ces constructions pour rendre cette compatibilité. Ai-je tort?
Si vous avez le module win32file , vous pouvez appeler getLogicalDrives () :
J'aime cette approche; Cependant, je cherche une manière croisée de la plate-forme de le faire, car mon script sera potentiellement exécuté sur Maya via Windows / Mac / Linux.
@sfjedi, je suis curieux de savoir comment maya émule des lettres de conduite sur Linux :)
Bon appel. Je n'ai jamais rien développé pour Linux encore, mais je ne me sens tout simplement pas à l'aise de descendre une route spécifique à Windows. Je sais que Maya court sur Linux cependant, c'est pourquoi je suis relativement préoccupé. Vous montrez un bon point cependant. J'ai besoin de penser plus sur la structure de répertoire sur Linux. En fait, j'essaie spécifiquement d'identifier les clichés flash qui sont branchés avec un dossier "école" sur la racine. C'est le but réel de ce script.
BTW, j'aime comment vous allez au-delà et au-delà de répondre à la vraie question.
Cela ne fonctionnera pas dans tous les systèmes d'exploitation de différentes plateformes
@Heasyearnacademy, la question est étiquetée [Windows] code>, alors je ne comprends pas ce que le problème est. Pour ce que ça vaut la peine, la réponse acceptée cible également Windows uniquement.
Voici une manière qui fonctionne à la fois sur Windows et Linux, pour Python 2 et 3:
import platform,os def hasdrive(letter): return "Windows" in platform.system() and os.system("vol %s: 2>nul>nul" % (letter)) == 0
Ummm ... Je ne vois rien à faire avec Linux là-bas.
Néanmoins, cela est vraiment extrêmement utile pour mes besoins. Vous savez-vous d'un moyen de supprimer la couverture de commandement?
@sfjedi: voir ma réponse ( Stackoverflow.com/Questtions/4188326/... ) pour un façon de faire cela sans une coquille de commandement.
MATT JOOKER: La fonction HasDrive fonctionne également sur Linux (renvoie False, comme Linux n'a pas de lettres d'entraînement)
J'espérais avoir des informations sur ce que "os.System (" vol% S: 2> nul> nul "% (lettre)) == 0" réellement. J'ai du mal à comprendre.
Dylan, vol code> est une commande Windows.
OS.System Code> En combinaison avec
2> Nul> Nul code> exécute la commande de manière silencieuse, où seul le code de retour est utilisé. Si le code de retour est 0 (
== 0 code>), il a fonctionné.
% s code> est remplacé par la lettre de lecteur, de sorte que, par exemple,
vol c: code> est en cours d'exécution. L'idée est de vérifier si cela renvoie une erreur ou non.
Utilisez le CTYPES code>
package pour accéder à la < un href = "http://msdn.microsoft.com/en-us/library/aa364972%28v=vs.85%29.aspx" rel = "nfollow noreferrer"> getLogicalDrives code> a > fonction. Cela ne nécessite pas de bibliothèques externes telles que PYWIN32, il est donc portable, bien qu'il s'agisse d'un peu plus encombrant de travailler. Par exemple:
itoTools.Compress code> a été ajouté à Python 2.7 et 3.1; Si vous devez prendre en charge <2.7 ou <3.1, voici une implémentation de cette fonction: p>
Ah, tu es un saint! N'oubliez pas de plate-forme d'importation code> cependant. En outre, il retourne toujours des lecteurs amovibles pour lesquels il n'y a pas de lecteur inséré. C'est en fait le problème ici est que je ne puisse pas détecter si le lecteur dispose d'un disque chargé ou non d'une erreur d'une sorte.
Mise à jour - Semestre de printemps a commencé cette semaine et j'ai eu la chance de tester cela à l'école. Tout fonctionne bien sans hoquet, mais je dois essayer quelques machines de plus avant de voir si cela fonctionne vraiment avec la fenêtre contextuelle.
Tant que un petit analysement est acceptable, il s'agit d'une façon de le faire sans installer Win32api et sans itération à travers toutes les lettres d'entraînement possibles.
from subprocess import check_output def getDriveLetters(): args = [ 'wmic', 'logicaldisk', 'get', 'caption,description,providername', '/format:csv' ] output = check_output(args) results = list() for line in output.split('\n'): if line: lineSplit = line.split(',') if len(lineSplit) == 4 and lineSplit[1][1] == ':': results.append(lineSplit[1][0]) return results
import os possible_drives_list = [chr(97 + num).upper() for num in range(26)] for drive in possible_drives_list: print(drive + ' exists :' + str(os.path.exists(drive + ':\\')))
import os def IsDriveExists(drive): return os.path.exists(drive + ':\\') print(IsDriveExists('c')) print(IsDriveExists('d')) print(IsDriveExists('e')) print(IsDriveExists('x')) print(IsDriveExists('v')) this works in any os
Au fait, nettoyeur pour éviter la carte:
[chr (ch) pour C en xrange (98, 123)] code>. Il est également sans doute plus clair de dire Xrange (Ord ('B'), ORD ('Z')) `. En outre, ne sautez pas "A"; Rien ne dit que cela doit être un lecteur de disquette. Je désactive toujours le contrôleur de disquette non utilisé, qui libère un:
Très bon conseil! Je l'ai mis en œuvre juste maintenant avec la méthode ORD () que vous avez décrite. Fonctionne très bien!
Je viens de remarquer que je dois mettre
ord ('z') + 1 code> pour que cela va tout le chemin à z i> cependant.