Python pathlib: разрешить полный путь к символической ссылке, не следуя ей - PullRequest
0 голосов
/ 16 февраля 2019

Допустим, у меня есть ссылка /home/me/folder/link, которая указывает на /home/me/target.Когда я вызываю

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

из /home/me/folder/, он вернет разрешенный путь к target , а не разрешенный путь ссылки.Как я могу получить последний, используя pathlib (кажется, что нет никаких вариантов для resolve())?

os.path эквивалентом того, что я ищу, будет os.path.abspath("link"))

1 Ответ

0 голосов
/ 20 февраля 2019

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

Метод не указан в документации к модулю, но его строка документации гласит:

Возвращает абсолютную версию этого пути.Эта функция работает, даже если путь ни на что не указывает.Нормализация не выполняется, т.е. все '.'и «..» будет сохранено.Используйте resol () для получения канонического пути к файлу.

Стоит отметить, что в коде метода (в ветке 3.7) есть комментарии, которые предполагают, что он может быть не полностью протестирован на всех платформах..

...