GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu zkontrolovat, zda je svazek připojen tam, kde má být pomocí Pythonu?

Ř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!


Linux
  1. Jak zkontrolovat, zda je připojen konkrétní adresář?

  2. Jak zkontrolovat, zda je oddíl připojen jako „noexec“?

  3. Jak zkontrolovat, zda je SELinux povolen nebo zakázán

  1. Jak trasovat Python skripty pomocí trace.py

  2. Jak mohu nastavit 'backend' v matplotlib v Pythonu?

  3. Jak poznám, že jsem na obrazovce?

  1. Jak vytvořit fyzický svazek v Linuxu pomocí LVM

  2. Jak mohu vyloučit adresáře z grep -R?

  3. Jak zjistím, zda je oddíl připojený nebo odpojený?