2012-10-01 67 views
8

¿Hay alguna manera de obtener una lista de dispositivos de almacenamiento conectados, como cámaras, tarjetas SD y discos duros externos, en Python?Python: sistema operativo Lista independiente de dispositivos de almacenamiento disponibles

+1

¿Cómo se define 'dispositivo de almacenamiento'? ¿Qué tan "conectado"? –

+0

@Tichodroma La lista de dispositivos externos que aparece en el Finder de Mac, el Explorador de Windows o el Explorador de archivos de Ubuntu. –

+2

define 'externo' – njzk2

Respuesta

5

Lo siguiente debería funcionar para Linux y Windows. Esto listará TODAS las unidades, ¡no solo las externas!

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.... 

El método anterior para Linux es muy cruda, y volverá conduce como sys y procfs etc., si quieres algo más afinado, mira en consulta con python-dbus.

+1

Probablemente, si agrega un paso que detecta cuál de los puntos de montaje pertenece al usuario actual (presumiblemente el usuario que inició sesión en el escritorio), la lista estará muy cerca de la lista de 'dispositivos externos'. Deberías poder desmontar primero lo que deseas desenchufar. – 9000

+1

aquí está [un ejemplo de cómo usar los discos U vía dbus] (http://stackoverflow.com/a/5081937/4279). La propiedad [DeviceIsRemovable] (http://hal.freedesktop.org/docs/udisks/Device.html#Device:DeviceIsRemovable) podría estar cerca. – jfs

+0

Puedes leer/proc/monturas en linux, sin necesidad de generar material. – LtWorf

Cuestiones relacionadas