os.path.normpath和符号链接

4
os.path.normpath 的文档读作如下:
该字符串操作可能会改变包含符号链接的路径的含义。
什么情况和示例适用于此处,其中含义将发生变化? 在何处应用此函数是不安全的,有什么解决方法?
1个回答

3

免责声明:我不能百分之百确定这一点,现在也没有访问*nix系统的权限来检查。你可能需要检查一下,或者等到评论者告诉我我是对还是错;-)

话虽如此,这是我的答案:

在给定的例子中A/foo/../B -> A/B。如果没有符号链接,一切都很好。

使用相同的例子,假设:

  • 我们目前在根目录/中
  • A在根目录(/A)中
  • A/foo是一个指向目录/X/Y的符号链接
  • /X/B是一个目录

所以:

  1. A/foo/../B意味着“目录B,在A/foo的父目录中”。
  2. A/foo是指向/X/Y的符号链接,因此“目录B,在A/foo的父目录中”实际上意味着“目录B,在/X/Y的父目录中”。
  3. /X/Y的父目录是/X,因此“目录B,在/X/Y的父目录中”实际上意味着“目录B,在/X中”。
  4. 因此,A/foo/../B实际上指的是/X/B

在这种情况下,将A/foo/../B规范化为/A/B是不正确的,它应该规范化为/X/B


你说得对。但需要注意的一点是,在好的shell环境下,cd A/foo/../B 命令会将当前工作目录设为 /A/B(这是已经记录的shell行为);然而,Python 的 os.chdir('A/foo/../B') 会像你预料的那样改变当前工作目录为 /X/B - r.v
感谢确认 :) - Tom Dalton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接