Python pathlib:将完整路径解析为符号 link 而不遵循它

Python pathlib: Resolve full path to symbolic link without following it

假设我有一个指向 /home/me/target 的 link/home/me/folder/link。 当我打电话给

pathlib.Path("link").resolve()

/home/me/folder/,它将 return 到 目标 的解析路径,而不是 link 的解析路径。 如何使用 pathlib 获得后者(resolve() 似乎没有任何选项)?

os.path 等同于我正在寻找的内容 os.path.abspath("link")

pathlib.Path 有一个 absolute 方法可以满足您的需求。

$  mkdir folder
$  touch target
$  ln -s ~/target ~/folder/link
$  ls -l folder/
total 0
lrwxrwxrwx 1 me users 16 Feb 20 19:47 link -> /home/me/target
$  cd folder

$/folder  python3.7 -c 'import os.path;print(os.path.abspath("link"))'
/home/me/folder/link

$/folder  python3.7 -c 'import pathlib;p = pathlib.Path("link");print(p.absolute())'
/home/me/folder/link

该方法未出现在模块文档中,但其 docstring 显示为:

Return an absolute version of this path. This function works even if the path doesn't point to anything. No normalization is done, i.e. all '.' and '..' will be kept along. Use resolve() to get the canonical path to a file.

值得注意的是,方法代码(在 3.7 分支中)中有注释表明它可能未在所有平台上进行全面测试。