如何在Linux上通过符号链接执行脚本时找到脚本的文件名

4
如果我有一个通过符号链接执行的Python脚本,是否有一种方法可以找到脚本的路径而不是符号链接?我尝试使用this问题中建议的方法,但它们总是返回符号链接的路径,而不是脚本的路径。
例如,当这个脚本保存为"/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

谢谢! Phil

3个回答

8

3

1
很酷,但是如何检查某个东西是否是符号链接?如果指向非链接,os.readlink()会返回什么?我想这不难测试。 - Hamish Grubijan
竞态条件怎么办?在你检查后但在调用readlink之前,它可能会被符号链接替换... - SamB

0

我相信你需要检查文件是否为符号链接,如果是的话,获取它所链接到的位置。例如...

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

1
os.path.realpath(file) 实际上是更好的回答你的问题。 - Josh Braegger

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