2015-11-13 57 views
6

我正在嘗試編寫python腳本來確定磁盤設備是否存在於/ dev中,但它總是產生False。任何其他方式來做到這一點?Python:檢查/ dev /磁盤設備是否存在

我試圖

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

試試'os.path.isabs'? –

回答

3

這是沒有經過嚴格的測試,但似乎工作:

import stat 
import os.stat 

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

結果:

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

我不認爲需要'import os.stat'。 (至少用python3) – gerardw

1

一些非常規的情況是怎麼回事。

os.path.isfile() 將返回True普通文件,設備文件,這將是 False

至於 os.path.exists(), documetation指出,如果「不被許可執行os.stat()False可以返回。 FYI的 os.path.exists實現如下:

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

所以,如果os.stat是在你失敗我看不出ls可能有 成功(ls據我所知還調用的stat()系統調用)。所以,檢查什麼 os.stat('/dev/bsd0')是提高理解爲什麼你不會被 能夠檢測到這種特殊的設備文件的存在與 os.path.exists,因爲使用os.path.exists()應該 是檢查塊存在一個有效的方法設備文件。