2010-08-29 18 views
8

Sto cercando di elencare le unità disco che un sistema può avere.Python & Cross platform per elencare le unità disco su Linux, Windows e Mac

Su Windows, può essere qualcosa come "C: /", "D: /", "E: /".

Su Linux, può essere qualcosa come "/ boot", "/ media/sdcard", ecc

E non so come ci si sente su un Mac. Forse qualcosa sotto/Volumi.

Qualcuno sa di un modo multipiattaforma (cioè, che funziona su Linux, Windows e Mac) in Python?

Grazie!

Oh: una nota veloce, sto eseguendo Python 2.6.

+0

Qual è il risultato finale che si desidera ottenere con questo? –

+0

Sto costruendo un'interfaccia per gli utenti per selezionare le unità disco collegate al computer. Dovrà conoscere lo spazio disponibile sulle unità e avere la possibilità di formattarle con i filesystem FAT32 (forse) e poter accedere ai file. –

+0

suggerimento: estrai la selezione per lavorare con ciò a cui hai accesso, fai in modo che funzioni, e quindi seleziona il dispositivo relativamente facile. E fai attenzione con la formazione, nel caso non sia ovvio. – msw

risposta

2

Non esiste uno schema di denominazione unificato per i dispositivi Linux che garantisca un dispositivo di blocco formattabile. Ci sono convenzioni, ma possono variare molto e posso chiamare il mio pollice-drive/Thomas/O se voglio e non c'è modo cross-platform in Python di sapere:

  1. Che/Thomas/O corrisponde a/dev/sdf1
  2. che/dev/sdf1 possono avere un filesystem FAT32 su di essa
  3. che/dev/sdf è non preferito a/dev/sdf1

sono abbastanza sicuro che non esiste nemmeno un modulo Python multipiattaforma che ti permetta di determinare che H:/è il formato in grado su un sistema Windows ma Z:/non lo è.

Ogni sistema richiede i propri controlli e convalide specifici che è meglio imparare dallo studio del software di manipolazione del disco open source.

+0

Stavo pensando a come funziona un programma come gparted.Ma questo non è cross-platform, solo Unix (o anche Linux), giusto? Le unità non devono necessariamente essere formattabili. Solo, dovrebbero essere collegati o media interni. Poiché mi occupo principalmente di schede SD, sto solo elencando/media sotto Linux,/Volumes su Mac e tutte le unità disco (C: /, D:/ecc.) Su Windows. –

+0

Non meditare, rubalo. Le idee, intendo, ma anche la fonte, a meno che non ti piaccia reinventare le ruote. http://sourceforge.net/projects/gparted/files/gparted/ – msw

+0

E non vi è alcuna garanzia che i media possano esistere anche su Linux o che venga montato un disco non formattato. Anche NT/Vista/7 consente di montare un dispositivo su una directory arbitraria nel modo Unix. – msw

11

Il pacchetto di psutil (https://pypi.python.org/pypi/psutil) ha una funzione disk_partitions.

di Windows:

>>> import psutil 
>>> psutil.disk_partitions() 
[sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='E:\\', mountpoint='E:\\', fstype='', opts='cdrom'), sdiskpart(device='F:\\', mountpoint='F:\\', fstype='NTFS', opts='rw,fixed')] 

Linux:

>>> import psutil 
>>> psutil.disk_partitions() 
[sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,errors=remount-ro'), sdiskpart(device='/dev/sr0', mountpoint='/media/VBOXADDITIONS_4.3.10_93012', fstype='iso9660', opts='ro,nosuid,nodev,uid=1000,gid=1000,iocharset=utf8,mode=0400,dmode=0500,uhelper=udisks')] 
+0

Su OS X, il mio disco ha un nome che appare in Finder (Macintosh HD ... Sono abbastanza sicuro che questo è il nome predefinito.) Qualche idea su come potrei trovare quel nome, perché questo è ciò che appare .. . 'sdiskpart (device = '/ dev/disk0s2', mountpoint = '/', fstype = 'hfs', opts = 'rw, local, rootfs, dovolfs, journaled, multilabel')'. – ArtOfWarfare

+0

Non conosco bene OS X, ma sospetto che sarebbe l'etichetta per il disco. Forse una chiamata a [disklabel] (https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/disklabel.8.html)? –

1

Eric Smith's answer to use psutil funziona bene per me su Windows, ma su OS X, io preferisco questo:

from os import listdir 
listdir('/Volumes') 

ti dà indietro i nomi leggibili dall'uomo che, almeno nel mio caso, sarebbero preferibili (IE, ti dà Macintosh HD anziché / o /dev/disk0s2.)

+0

Ottieni l'attributo 'mountpoint' dalla tupla denominata restituita da psutil per ottenere il nome leggibile dall'uomo – Debjit

+0

@Debjit - No. Su OS X che restituisce '/' invece di 'Macintosh HD' – ArtOfWarfare