Soluzione 1:
Darei un'occhiata a os.path.ismount()
.
Soluzione 2:
Per una risposta definitiva a qualcosa che solo il kernel sa per certo, chiedi al kernel:
cat /proc/mounts
Quel file può essere letto / analizzato come se fosse un file normale, utilizzando qualsiasi strumento ti piaccia. Compreso Python. Esempio veloce e sporco:
#!/usr/bin/python
d = {}
for l in file('/proc/mounts'):
if l[0] == '/':
l = l.split()
d[l[0]] = l[1]
import pprint
pprint.pprint(d)
Soluzione 3:
Il modo più semplice per controllare è invocare mount
tramite subprocess
e vedere se si presenta lì. Per credito extra, usa os.readlink()
sui contenuti di /dev/disk/by-*
per capire di quale dispositivo si tratta.
Soluzione 4:
Risposta bonus. Se il dispositivo esterno non è montato, i dati vengono scritti nella partizione root nel percorso /external-backup
. Se il dispositivo esterno è montato, i dati sulla partizione root sono ancora presenti ma non sono raggiungibili perché /external-backup
ora punta a un dispositivo esterno.
Soluzione 5:
Vecchia domanda, ma ho pensato di contribuire comunque con la mia soluzione (basata sulla risposta di Dennis Williamson e Ignacio Vazquez-Abrams). Dal momento che lo sto usando su un ambiente non Linux per controllare le directory remote montate, /proc e mtab non può essere utilizzato e non sono stati implementati ulteriori controlli:
def is_mounted(special, directory):
search_prefix = '{} on {}'.format(special, directory.rstrip('/'))
if os.path.ismount(directory):
mounts = subprocess.check_output(['mount']).split('\n')
for line in mounts:
if line[:len(search_prefix)] == search_prefix:
return True;
return False
Miglioramenti benvenuti!