import os
def isLink(a, b):
return os.path.islink(a) and os.path.realpath(a) == os.path.realpath(b)
注意,这解决了第二个参数是一个真正的路径。所以如果a
和b
都是符号链接,它们将返回True,只要它们都指向相同的实际路径即可。如果你不想b
被解析为一个真正的路径,然后更改
os.path.realpath(a) == os.path.realpath(b)
到
os.path.realpath(a) == os.path.abspath(b)
现在如果a
点b
,并c
b
点,你想isLink(a, b)
到仍然是真的,那么你会想要使用os.readlink(a)
而不是os.path.realpath(a)
:
def isLink(a, b):
return os.path.islink(a) and os.path.abspath(os.readlink(a)) == os.path.abspath(b)
os.readlink(a)
评估为b
,则下一个环节是a
点,而os.path.realpath(a)
计算结果为c
,则最终路径是a
点。
例如,
In [129]: !touch z
In [130]: !ln -s z x
In [131]: !touch w
In [132]: !ln -s w y
In [138]: isLink('x', 'z')
Out[138]: True
In [139]: isLink('y', 'z')
Out[139]: False
In [140]: isLink('z', 'z')
Out[140]: False
击败了我:L –
如果你想找出符号链接指向什么,使用'os.path.realpath()'。 – Amber