Řešení 1:
Podíval bych se na os.path.ismount()
.
Řešení 2:
Pro definitivní odpověď na něco, co s jistotou zná pouze jádro, se zeptejte jádra:
cat /proc/mounts
Tento soubor lze číst / analyzovat, jako by to byl normální soubor, pomocí jakýchkoli nástrojů, které chcete. Včetně Pythonu. Příklad Quick-n-dirty:
#!/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)
Řešení 3:
Nejjednodušší způsob kontroly je vyvolat mount
přes subprocess
a uvidíme, jestli se tam objeví. Pro extra kredit použijte os.readlink()
na obsah /dev/disk/by-*
abyste zjistili, o jaké zařízení se jedná.
Řešení 4:
Bonusová odpověď. Pokud externí zařízení není připojeno, data se zapisují do kořenového oddílu v cestě /external-backup
. Pokud je připojeno externí zařízení, data na kořenovém oddílu jsou stále tam, ale nejsou dostupná, protože /external-backup
nyní ukazuje na externí zařízení.
Řešení 5:
Stará otázka, ale myslel jsem, že i tak přispěji svým řešením (na základě odpovědi Dennise Williamsona a Ignacia Vazqueze-Abramse). Vzhledem k tomu, že jej používám v jiném než Linuxovém prostředí ke kontrole připojovaných vzdálených adresářů, /proc a mtab nelze použít a nebyly implementovány žádné dodatečné kontroly:
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
Vylepšení vítána!