2016-04-11 157 views
3

我需要評估兩個字符串是否指的是同一個目錄或沒有(做一個簡單的比較是不夠的,由於可能的虛擬鏈接,等...)檢查目錄路徑是相同的

我有看着filecmp,但filecmp.cmp似乎只適用於文件,而不是目錄。 filecmp.dircmp似乎並不完全符合我的目的。

因此,我目前做這種方式:

if os.path.realpath(old_path) == os.path.realpath(new_path): 
    raise ValueError('Need different path!') 

有沒有人有一個更好的主意嗎?有沒有什麼邊緣情況下,這不會工作?

+0

那麼,使用'assert'就意味着如果你用'-O'運行Python來「優化」(禁用斷言),它將不會執行測試。除非不可能用錯誤的目錄調用代碼(並且這僅僅是用於開發目的的檢查),否則您想要測試並提升ValueError或類似的東西,而不僅僅是「assert」它。 – ShadowRanger

+0

好點,我會改變這一點。 – DevShark

回答

0

一個可能的邊緣情況會像多個掛載點/綁定掛載。如果你有機會獲得一臺Linux機器,嘗試以root身份:

$ mkdir -p /tmp/a /tmp/b /tmp/c 
$ mount --bind /tmp/c /tmp/a 
$ mount --bind /tmp/c /tmp/b 

在/ tmp/a和/ tmp目錄/ B路徑現在指向同一個目錄:

$ echo 'Hello' > /tmp/a/file.txt 
$ cat /tmp/b/file.txt 
Hello 

無論是在你的情況下,一個問題很難說不知道爲什麼你想檢查這種平等。如果它只是一個完整的檢查,你的原始比較看起來非常合理。

否則,如果您的平臺支持它,您可以嘗試使用os.stat()來比較inode編號。相同的目錄應該有相同的inode編號。

+0

感謝您的回答。你有沒有關於如何使這個功能更強大的想法,你突出顯示的例子? – DevShark

+0

會比較inode號碼嗎? –

相關問題