Python 中有没有一种方法可以检查一个文件是否是另一个特定文件的符号链接(symbolic link)?例如,如果 /home/user/x
符号链接(symbolic link)到 /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 是原始文件,不是符号链接(symbolic link))
最佳答案
import os
def isLink(a, b):
return os.path.islink(a) and os.path.realpath(a) == os.path.realpath(b)
请注意,这会将第二个参数解析为真实路径。因此,如果 a
和 b
都是符号链接(symbolic link),只要它们都指向相同的真实路径,它就会返回 True。如果你不希望b
被解析为真实路径,那么改变
os.path.realpath(a) == os.path.realpath(b)
到
os.path.realpath(a) == os.path.abspath(b)
现在如果a
指向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
,即 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
关于python - 如果路径是指向另一个路径的符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17889368/