最直接的方式是使用 os.path.ismount,它通过比较路径与父目录的 st_dev 是否不同来判断挂载点,不依赖 os.statvfs,且在 Unix/Linux 和 Windows 上均适用,但需注意路径存在性、符号链接处理及根目录的特殊返回值。
os.path.ismount 是最直接的方式Python 标准库提供了 os.path.ismount,它不依赖 os.statvfs,而是通过比对路径与其父目录的 st_dev(设备号)是否不同来判断——这是 Unix/Linux 下挂载点的本质特征:挂载后,该路径所在文件系统与父目录所属文件系统通常具有不同设备号。
注意:os.path.ismount 在 Windows 上行为略有不同(基于驱动器盘符和卷挂载点),但依然不调用 statvfs。
'/' 总是返回 True(即使没显式挂载,它也被视为挂载点)OSError;建议先用 os.path.exists 或捕获异常os.path.ismount 默认跟随链接;如需判断链接本身是否为挂载点,应传入 follow_symlinks=False(Python 3.12+ 支持,旧版本不支持该参数)st_dev 实现更可控的判断当需要绕过 os.path.ismount 的默认行为(比如处理符号链接、或调试底层逻辑),可手动获取路径及其父目录的设备号并比较:
import osdef is_mount_point(path): try: stat_path = os.stat(path) parent = os.path.dirname(os.path.abspath(path)) if parent == path: # 已到根目录 return True stat_parent = os.stat(parent) return stat_path.st_dev != stat_parent.
st_dev except (OSError, ValueError): return False
statvfs,只用 os.stat,开销小os.stat 对符号链接默认不跟随,因此能准确反映路径本身的挂载状态(而非目标)/proc/mounts 解析的常见误区有人试图读取 /proc/mounts 或 findmnt 输出来判断,这看似绕开了 statvfs,但实际引入了新问题:
target 字段(例如 /mnt/data ≠ /mnt/data/,末尾斜杠可能导致失败)/proc/mounts 条目语义复杂,单纯字符串匹配不可靠/proc/mounts 仅 Linux;macOS 用 mount 命令输出格式不同)os.statvfs 是个合理诉求os.statvfs 在某些场景下会触发内核实际访问文件系统元数据,导致:
OSError: [Errno 5] Input/output error
/proc、/sys)对 statvfs 返回无意义值,而 st_dev 比对仍有效所以,除非你明确需要块大小、可用空间等信息,否则用 st_dev 比对或 os.path.ismount 更轻量、更健壮。