os.path.islink(path) 是判断路径是否为符号链接的标准方法,不跟随链接、只检查元数据,目标不存在或不可访问时也不报错;返回 True 表示是符号链接,False 表示不是(含路径不存在)。

用 os.path.islink() 可以直接判断一个路径是否为符号链接,且它**不跟随链接**,只检查路径本身是否是符号链接文件(即 link 的元数据是否存在)。
确认是否为符号链接(不跟随)
os.path.islink(path) 是最标准、最安全的方式。它只读取路径的元数据(如 inode 类型),不会访问链接指向的目标,因此即使目标不存在、不可读或根本无法访问,也不会报错或跟随。
- 返回 True:该路径本身是一个符号链接(无论目标是否存在)
- 返回 False:不是符号链接(可能是普通文件、目录、设备文件,或路径根本不存在)
注意:不要用 os.path.exists() 或 os.stat() 替代
这些函数默认会**跟随符号链接**(即解析到目标再检查):
-
os.path.exists(path)→ 若path是坏链接(目标不存在),返回False;但它无法告诉你“这是不是链接”,只告诉你“最终目标是否存在” -
os.stat(path)→ 遇到坏链接会抛出FileNotFoundError;遇到权限不足可能抛出PermissionError - 若真需要获取链接本身的属性(如创建时间、所有者),应使用
os.lstat(path)(l表示 “link-aware”,不跟随)
简单示例
假设你有一个符号链接 mylink → nonexistent.txt:
立即学习“Python免费学习笔记(深入)”;
import os
print(os.path.islink("mylink")) # True
print(os.path.exists("mylink")) # False(因为目标不存在)
print(os.path.islink("nonexistent.txt")) # False(路径不存在,更不是链接)
print(os.path.islink("/tmp")) # False(通常是目录,不是链接)
补充:跨平台兼容性
os.path.islink() 在 Windows 上也有效,但仅当启用了符号链接支持(如管理员权限创建的链接,或 Windows 10+ 启用开发者模式)。在不支持的 Windows 环境中,它恒返回 False —— 这属于系统限制,不是 Python 的问题。










