2013-07-26 117 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

相關問題