3

Python中有没有办法检查一个文件是否是另一个特定文件的符号链接?例如,如果/home/user/x符号链接到/home/user/z, 但/home/user/y链接到其他地方:

>>>print(isLink("/home/user/x", "/home/user/z"))
True
>>>print(isLink("/home/user/y", "/home/user/z"))
False
>>>print(isLink("/home/user/z", "/home/user/z"))
False

(/home/user/z 是原始文件,不是符号链接)

4

2 回答 2

4
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指向bb指向c,并且您isLink(a, b)仍然希望为 True,那么您将要使用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
于 2013-07-26T19:26:29.063 回答
1

这会做到的。

os.path.realpath(path)

这是文档

于 2013-07-26T19:28:01.830 回答