12
votes

Cross Platform Way de lister des lecteurs de disque sur Linux, Windows et Mac à l'aide de Python?

J'utilise Python2.6. J'essaie d'énumérer les lecteurs de disque qu'un système peut avoir.

sous Windows, il peut s'agir de quelque chose comme c: / , d: / , e: / , etc. sur Linux, il Peut-être quelque chose comme / boot , / support / sdcard , etc., et je ne sais pas ce que c'est comme sur un Mac. Peut-être quelque chose sous / volumes.

Est-ce que quelqu'un connaît une voie à plate-forme croix (c'est-à-dire celui qui fonctionne sur Linux, Windows et Mac) en Python?

merci!


4 commentaires

Quel est le résultat final que vous voulez réaliser avec cela?


Je construis une interface pour les utilisateurs pour sélectionner des lecteurs de disque attachés à l'ordinateur. Il aura besoin de connaître l'espace disponible sur les lecteurs et de la possibilité de les formater avec des systèmes de fichiers FAT32 (peut-être) et de pouvoir accéder aux fichiers.


Suggestion: Stupez la sélection pour travailler avec ce que vous avez accès, obtenez-le pour fonctionner, puis effectuez la sélection comparativement facile du périphérique. Et faites attention à la formation, au cas où cela ne va pas sans dire.


/ etc / fstab et la sortie de montage sont des réponses évidentes pour le côté Linux.


4 Réponses :


3
votes

Il n'y a pas vraiment un schéma de dénomination unifié pour les périphériques Linux qui vous garantit un périphérique de blocage automatique. Il y a des conventions, mais elles peuvent varier considérablement et je peux appeler ma clém-drive / thomas / o si je veux et il n'y a pas de chemin croisé dans Python de savoir:

  1. que / thomas / o correspond à / dev / sdf1
  2. que / dev / sdf1 peut avoir un système de fichiers FAT32 fabriqué sur celui-ci
  3. que / dev / sdf est pas préféré à / dev / sdf1

    Je suis à peu près sûr que non plus un module Python multi-plate-forme qui vous permettra de déterminer que H: / est formable sur un système Windows, mais que Z: / n'est pas.

    Chaque système nécessitera ses propres chèques et validations spécifiques que vous pourrez mieux apprendre d'étudier le logiciel de manipulation de disque open source.


3 commentaires

Je pensais à la façon dont un programme comme GParted le fait. Mais ce n'est pas une plate-forme transversale, seulement Unix (ou même Linux), non? Les lecteurs ne doivent pas nécessairement être formables. Juste, ils devraient être attachés ou des médias internes. Comme je traite principalement des cartes SD, je ne fais que la liste / les médias sous Linux, / volumes sur Mac et tous les disques (C: /, D: / etc.) sous Windows.


Ne pas réfléchir, le voler. Les idées, je veux dire, mais la source aussi, sauf si vous aimez la réinventer des roues. sourceforge.net/projects/gparted/files/gparted


Et il n'y a aucune garantie sur tout ce que / media existe même sur Linux ou qu'un entraînement non formaté sera monté pour que vous puissiez voir. Même NT / Vista / 7 permet de monter un périphérique sur un répertoire arbitraire de la manière UNixy.



17
votes

Le package pstutile ( https://pypi.python.org/pypi/psutil ) a une fonction disk_partitions.

Windows: xxx

linux: xxx


3 commentaires

Sur OS X, mon lecteur a un nom qui apparaît dans Finder (Macintosh HD ... Je suis sûr que c'est le nom par défaut.) Avez-vous une idée de la façon dont je pouvais trouver ce nom, car c'est ce qui montre ... SDISKPART (Device = '/ Dev / Disk0SS2', MounTpoint = '/', Fstype = 'HFS', OPTS = 'RW, Local, Rootfs, Dovolfs, Journaled, Multilabel') .


Je ne connais pas bien OS X, mais je soupçonnerais que ce serait l'étiquette du disque. Peut-être un appel à disklabel ?


Cette réponse ne fonctionne que pour les disques montés



1
votes

La réponse d'Eric Smith à utiliser psutil fonctionne bien pour moi sur Windows, mais sur OS X, je préfère ceci: xxx

Cela vous donne les noms lisibles humains qui, au moins dans mon cas, seraient préférables (c'est-à-dire qu'il vous donne Macintosh HD Au lieu de / ou / dev / disk0s2 .)


2 commentaires

Obtenez l'attribut «MountPoint '» du tuple nommé renvoyé par Psutil pour obtenir le nom lisible humain


@Debjit - Nope. Sur OS X qui renvoie / au lieu de macintosh HD



2
votes

Je ne vois pas un moyen d'inclure des montures nettes sous Windows. I.e., \ foobar \ home est mappé sur x :, mais x: n'apparaît pas dans la liste renvoyée par psutil.disk_partitions () (les lecteurs locaux sont).

Mise à jour: pour inclure des lecteurs nets dans la liste retournée, utilisez simplement:

psutil.disk_partitions (tout = vrai)

fonctionne assez bien.


0 commentaires