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
Odpowiedz
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
.
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
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
Możesz po prostu czytać/proc/mounts na Linuksie, nie ma potrzeby odradzania się. – LtWorf
Jak zdefiniować "urządzenie magazynujące"? Jak "połączony"? –
@ Tichodroma Lista urządzeń zewnętrznych wyświetlanych w przeglądarce Mac Finder, Eksploratorze Windows lub przeglądarce plików Ubuntu. –
zdefiniuj "zewnętrzny" – njzk2