2015-11-13 10 views
6

Ich versuche, Python-Skript zu schreiben, um herauszufinden, ob ein Laufwerk in/dev existiert, aber immer False ergibt. Irgendeine andere Möglichkeit, dies zu tun?Python: Überprüfen Sie, ob ein/dev/disk-Gerät existiert

Ich versuchte

>>> import os.path 
>>> os.path.isfile("/dev/bsd0") 
False 
>>> os.path.exists("/dev/bsd0") 
False 

$ ll /dev 
... 
brw-rw---- 1 root disk 252, 0 Nov 12 21:28 bsd0 
... 
+0

Versuchen Sie 'os.path.isabs'? –

Antwort

3

Diese nicht rigoros getestet wurde, aber scheint zu funktionieren:

import stat 
import os.stat 

def disk_exists(path): 
    try: 
      return stat.S_ISBLK(os.stat(path).st_mode) 
    except: 
      return False 

Ergebnisse:

disk_exists("/dev/bsd0") 
True 
disk_exists("/dev/bsd2") 
False 
+1

Ich glaube nicht, dass 'os.stat importieren' benötigt wird. (Zumindest mit python3) – gerardw

1

Einige unkonventionelle Situation hier vor sich geht.

os.path.isfile() wird True für reguläre Dateien zurückkehren, für Gerätedateien wird diese False sein.

Aber wie für os.path.exists(), heißt es -Dokumentation über das False zurückgeführt werden kann, wenn „die Erlaubnis nicht erteilt ist os.stat() auszuführen“. Zu Ihrer Information die Umsetzung der os.path.exists ist:

def exists(path): 
    """Test whether a path exists. Returns False for broken symbolic links""" 
    try: 
     os.stat(path) 
    except OSError: 
     return False 
    return True 

Also, wenn os.stat dir versagt ich sehe nicht, wie ls gelang es haben könnte (ls AFAIK auch nennt stat() syscall). Also, überprüfen, was os.stat('/dev/bsd0') erzieht zu verstehen, warum Sie nicht der Lage, die Existenz dieser speziellen Gerätedatei zu erkennen, mit os.path.exists, weil mit os.path.exists() soll eine gültige Methode, um für die Existenz eines Blocks zu überprüfen Gerätedatei.

Verwandte Themen