Solución 1:
Echaría un vistazo a os.path.ismount()
.
Solución 2:
Para obtener una respuesta definitiva a algo que solo el kernel sabe con certeza, pregúntele al kernel:
cat /proc/mounts
Ese archivo se puede leer/analizar como si fuera un archivo normal, utilizando las herramientas que desee. Incluyendo Pitón. Ejemplo rápido y sucio:
#!/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)
Solución 3:
La forma más fácil de verificar es invocar mount
vía subprocess
y ver si aparece allí. Para obtener crédito adicional, use os.readlink()
sobre el contenido de /dev/disk/by-*
para averiguar qué dispositivo es.
Solución 4:
Respuesta de bonificación. Si el dispositivo externo no está montado, los datos se escriben en la partición raíz en la ruta /external-backup
. Si el dispositivo externo está montado, los datos en la partición raíz todavía están allí, pero no se puede acceder a ellos porque /external-backup
ahora apunta a un dispositivo externo.
Solución 5:
Pregunta anterior, pero pensé que contribuiría con mi solución (basada en la respuesta de Dennis Williamson e Ignacio Vázquez-Abrams) de todos modos. Dado que lo estoy usando en un entorno que no es Linux para comprobar que se están montando directorios remotos, /proc y mtab no se puede utilizar y no se han implementado comprobaciones adicionales:
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
¡Bienvenidas las mejoras!