python - скажите, указывают ли два пути в символических ссылках на один и тот же файл [дубликат]

49
задан duhhunjonn 10 July 2010 в 21:36
поделиться

5 ответов

В Windows 10 работает python 3.5, os.readlink("C:\\Users\PP"), где «C: \ Users \ PP» - это символическая ссылка (не соединение).

Возвращает абсолютный путь к каталогу.

Это работает и на Ubuntu 16.04, python 3.5.

0
ответ дан alpha_989 24 August 2018 в 18:17
поделиться

Как говорит unutbu, os.path.realpath (path) должен быть правильным ответом, возвращая канонический путь указанного имени файла, разрешая любые символические ссылки на их цели. Но он сломан под Windows.

Я создал патч для Python 3.2, чтобы исправить эту ошибку, и загрузил ее в:

http: //bugs.python. org / issue9949

Он исправляет функцию realpath в Python32 \ Lib\ntpath.py

Я также разместил ее на своем сервере здесь:

http://www.burtonsys.com/ntpath_fix_issue9949.zip

К сожалению, ошибка присутствует и в Python 2.x, и я ничего не знаю для него там.

13
ответ дан Dave Burton 24 August 2018 в 18:17
поделиться

Документация говорит использовать os.path.join():

. Результатом может быть либо абсолютное, либо относительное имя пути; если он относительный, он может быть преобразован в абсолютный путь с помощью os.path.join(os.path.dirname(path), result).

0
ответ дан Don Kirkby 24 August 2018 в 18:17
поделиться

http://docs.python.org/library/os.path.html#os.path.abspath

также соединяют путь и нормальный путь, в зависимости от того, re в текущем рабочем каталоге, или вы работаете с вещами в другом месте. normpath может быть более прямым для вас.

Обновление:

в частности:

os.path.normpath( 
  os.path.join( 
    os.path.dirname( '/etc/fonts/conf.d/70-yes-bitmaps.conf' ), 
    os.readlink('/etc/fonts/conf.d/70-yes-bitmaps.conf') 
  ) 
)
8
ответ дан eruciform 24 August 2018 в 18:17
поделиться
  • 1
    Будьте осторожны: если вы пройдете путь, который не является символической ссылкой на readlink, он разозлится и даст следующее исключение: OSError: [Errno 22] Invalid argument: 'your-path' – Diego 23 January 2015 в 11:33
os.path.realpath(path)

os.path.realpath возвращает канонический путь указанного имени файла, исключая любые символические ссылки, встречающиеся в пути.

90
ответ дан unutbu 24 August 2018 в 18:17
поделиться
  • 1
    os.path.realpath не устраняет символические ссылки в Python 3.2 под Windows 7. (Ошибка?) – Dave Burton 9 March 2012 в 16:05
  • 2
    Хммм ... Я вижу, что это была открытая ошибка в течение 1,5 лет: bugs.python.org/issue9949 – Dave Burton 9 March 2012 в 16:23
  • 3
    Получив эту же проблему, 3 года спустя: c – Coburn 22 August 2015 в 04:16
  • 4
    в Python3, если вы используете объект Path, вы можете сделать то же самое, выполнив path.resolve() – rogueleaderr 20 March 2018 в 20:57
  • 5
    Если C:\\Users\\PP является символической ссылкой на другой каталог, в Windows 10 с использованием python 3.5, os.path.realpath("C:\\Users\PP") в основном возвращает путь symlink, а не реальный путь. – alpha_989 31 March 2018 в 16:45
Другие вопросы по тегам:

Похожие вопросы: