Как найти имя файла сценария, который запускается, когда он выполняется по символической ссылке в Linux - PullRequest
4 голосов
/ 31 марта 2010

Если у меня есть скрипт на python, который выполняется по символической ссылке, есть ли способ найти путь к сценарию, а не по символической ссылке? Я пытался использовать методы, предложенные в этом вопросе, но они всегда возвращают путь к символической ссылке, а не сценарию.

Например, когда это сохраняется как "/usr/home/philboltt/scripts/test.py":

#!/usr/bin/python

import sys

print sys.argv[0]
print __file__

и затем я создаю эту символическую ссылку

ln -s /usr/home/philboltt/scripts/test.py /usr/home/philboltt/test

и выполните скрипт, используя

/usr/home/philboltt/test

Я получаю следующий вывод:

/usr/home/philboltt/test
/usr/home/philboltt/test

Спасибо! Фил

Ответы [ 3 ]

7 голосов
/ 31 марта 2010

Вы хотите функцию <a href="http://docs.python.org/library/os.path.html#os.path.realpath" rel="noreferrer">os.path.realpath()</a>.

3 голосов
/ 31 марта 2010

os.readlink() разрешит символическую ссылку, а os.path.islink() скажет вам, если это символическая ссылка в первую очередь.

0 голосов
/ 31 марта 2010

Полагаю, вам нужно проверить, является ли файл символической ссылкой, и если да, узнать, где он связан. Например ...

try:
    print os.readlink(__file__)
except:
    print "File is not a symlink"
...