2016-04-11 119 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号码吗? –

相关问题