2012-10-01 8 views
8

Czy istnieje sposób na uzyskanie listy podłączonych urządzeń magazynujących, takich jak aparaty fotograficzne, karty SD i zewnętrzne dyski twarde, w języku Python?Python: OS Niezależna lista dostępnych urządzeń magazynujących

+1

Jak zdefiniować "urządzenie magazynujące"? Jak "połączony"? –

+0

@ Tichodroma Lista urządzeń zewnętrznych wyświetlanych w przeglądarce Mac Finder, Eksploratorze Windows lub przeglądarce plików Ubuntu. –

+2

zdefiniuj "zewnętrzny" – njzk2

Odpowiedz

5

Następujące elementy powinny działać w systemach Linux i Windows. Spowoduje to wyświetlenie WSZYSTKICH napędów, nie tylko zewnętrznych!

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

Powyższa metoda dla Linuksa jest bardzo surowe, a powróci dyski jak sys i procfs itp, jeśli chcesz coś bardziej dopracowany, spojrzeć na odpytywanie z python-dbus.

+1

Prawdopodobnie, jeśli dodasz krok, który wykryje, które punkty montowania są własnością bieżącego użytkownika (prawdopodobnie zalogowanego użytkownika pulpitu), lista będzie bardzo blisko listy "urządzeń zewnętrznych". Powinieneś być w stanie odłączyć najpierw to, co chcesz odłączyć. – 9000

+1

tutaj [przykład jak korzystać z Udisks przez dbus] (http://stackoverflow.com/a/5081937/4279). Właściwość [DeviceIsRemovable] (http://hal.freedesktop.org/docs/udisks/Device.html#Device:DeviceIsRemovable) może być bliska. – jfs

+0

Możesz po prostu czytać/proc/mounts na Linuksie, nie ma potrzeby odradzania się. – LtWorf