Solution 1 :
Je jetterais un œil à os.path.ismount()
.
Solution 2 :
Pour une réponse définitive à quelque chose que seul le noyau sait avec certitude, demandez au noyau :
cat /proc/mounts
Ce fichier peut être lu / analysé comme s'il s'agissait d'un fichier normal, en utilisant les outils de votre choix. Y compris Python. Exemple rapide et salissant :
#!/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)
Solution 3 :
Le moyen le plus simple de vérifier est d'invoquer mount
via subprocess
et voir s'il apparaît là-bas. Pour un crédit supplémentaire, utilisez os.readlink()
sur le contenu de /dev/disk/by-*
pour savoir de quel appareil il s'agit.
Solution 4 :
Réponse bonus. Si le périphérique externe n'est pas monté, les données sont écrites sur la partition racine au chemin /external-backup
. Si le périphérique externe est monté, les données sur la partition racine sont toujours là mais elles ne sont pas accessibles car /external-backup
pointe maintenant vers un périphérique externe.
Solution 5 :
Vieille question, mais je pensais apporter ma solution (basée sur la réponse de Dennis Williamson et Ignacio Vazquez-Abrams) de toute façon. Puisque je l'utilise sur un environnement non-Linux pour vérifier les répertoires distants en cours de montage, /proc et mtab ne peut pas être utilisé et aucune vérification supplémentaire n'a été implémentée :
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
Améliorations bienvenues !