Python:检查/ dev / disk设备是否存在

时间:2015-11-13 02:41:06

标签: python

我正在尝试编写python脚本以查明/ dev中是否存在磁盘设备,但它总是产生False。还有其他办法吗?

我试过

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

这里有一些非传统的情况。

os.path.isfile() 将为常规文件返回True,对于设备文件将返回False False

但至于 os.path.exists(), documetation声明如果“权限不是,则可以返回os.stat() 被授予执行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会怎样 成功(os.stat('/dev/bsd0') AFAIK也调用stat()系统调用)。那么,检查一下 os.path.exists正在提升,以了解你为什么不在 能够检测到这个特定设备文件的存在 os.path.exists(),因为假设使用var query = from p in db.Payments where p.Status == false && DateTime.Compare(DateTime.Now, p.NextPaymentDate.Value) == 1 group p by p.CompanyID into op select op.OrderByDescending(nd => nd.NextPaymentDate.Value).FirstOrDefault(); 是检查块设备文件是否存在的有效方法。