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