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
risposta
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
.
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
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
Puoi solo leggere/proc/mounts su linux, senza bisogno di generare cose. – LtWorf
Come si definisce "dispositivo di archiviazione"? Come 'connesso'? –
@Tichodroma L'elenco di dispositivi esterni che appare nel Finder di Mac, in Esplora risorse o nel navigatore di file di Ubuntu. –
definire 'esterno' – njzk2