2013-07-26 53 views
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 

(/家/用户/ z是原始文件,而不是一个符号链接)

回答

4
import os 
def isLink(a, b): 
    return os.path.islink(a) and os.path.realpath(a) == os.path.realpath(b) 

注意,这解决了第二个参数是一个真正的路径。所以如果ab都是符号链接,它们将返回True,只要它们都指向相同的实际路径即可。如果你不想b被解析为一个真正的路径,然后更改

os.path.realpath(a) == os.path.realpath(b) 

os.path.realpath(a) == os.path.abspath(b) 

现在如果ab,并cb点,你想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 
+0

击败了我:L –

+0

如果你想找出符号链接指向什么,使用'os.path.realpath()'。 – Amber

1

这将做到这一点。

os.path.realpath(path) 

这里是docs

相关问题