2012-10-01 8 views
8

C'è un modo per ottenere un elenco di dispositivi di archiviazione collegati, come telecamere, schede SD e dischi rigidi esterni, in Python?Python: OS Elenco indipendente di dispositivi di archiviazione disponibili

+1

Come si definisce "dispositivo di archiviazione"? Come 'connesso'? –

+0

@Tichodroma L'elenco di dispositivi esterni che appare nel Finder di Mac, in Esplora risorse o nel navigatore di file di Ubuntu. –

+2

definire 'esterno' – njzk2

risposta

5

Quanto segue dovrebbe funzionare per Linux e Windows. Questo elencherà TUTTE le unità, non solo quelle esterne!

import subprocess 
import sys 

#on windows 
#Get the fixed drives 
#wmic logicaldisk get name,description 
if 'win' in sys.platform: 
    drivelist = subprocess.Popen('wmic logicaldisk get name,description', shell=True, stdout=subprocess.PIPE) 
    drivelisto, err = drivelist.communicate() 
    driveLines = drivelisto.split('\n') 
elif 'linux' in sys.platform: 
    listdrives=subprocess.Popen('mount', shell=True, stdout=subprocess.PIPE) 
    listdrivesout, err=listdrives.communicate() 
    for idx,drive in enumerate(filter(None,listdrivesout)): 
     listdrivesout[idx]=drive.split()[2] 
# guess how it should be on mac os, similar to linux , the mount command should 
# work, but I can't verify it... 
elif 'macosx' ... 
    do the rest.... 

Il metodo di cui sopra per Linux è molto grezzo, e tornerà unità come sys e procfs ecc, se volete qualcosa di più messo a punto, esaminare l'interrogazione con python-dbus.

+1

Probabilmente se si aggiunge una fase che rileva quali dei punti di montaggio sono di proprietà dell'utente corrente (presumibilmente l'utente connesso al desktop), l'elenco sarà molto vicino all'elenco di "dispositivi esterni". Dovresti essere in grado di smontare prima ciò che vuoi scollegare. – 9000

+1

ecco [un esempio su come usare gli Udisks via dbus] (http://stackoverflow.com/a/5081937/4279). Proprietà [DeviceIsRemovable] (http://hal.freedesktop.org/docs/udisks/Device.html#Device:DeviceIsRemovable) potrebbe essere vicino. – jfs

+0

Puoi solo leggere/proc/mounts su linux, senza bisogno di generare cose. – LtWorf

Problemi correlati