编程语言
首页 > 编程语言> > python – 如果path是符号链接到另一个路径

python – 如果path是符号链接到另一个路径

作者:互联网

有没有办法在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是原始文件,而不是符号链接)

解决方法:

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)

现在,如果指向b,并且b指向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,指向的下一个链接,而os.path.realpath(a)求值为c,指向的最终路径.

例如,

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

标签:python,filesystems,symlink
来源: https://codeday.me/bug/20190831/1777504.html