【问题标题】:How to find the filename of a script being run when it is executed from a symlink on linux从linux上的符号链接执行脚本时如何找到正在运行的脚本的文件名
【发布时间】:2011-02-02 16:26:21
【问题描述】:

如果我有一个通过符号链接执行的 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

谢谢! 菲尔

【问题讨论】:

    标签: python linux filenames symlink


    【解决方案1】:

    os.readlink() 将解析符号链接,os.path.islink() 会首先告诉您它是否是符号链接。

    【讨论】:

    • 很酷,但是如何检查某个东西是否是符号链接?如果指向非链接,os.readlink() 会返回什么?我想这并不难测试。
    • 竞态条件如何?在您检查之后但在调用 readlink 之前,它可能会被符号链接替换...
    【解决方案2】:

    我相信您需要检查文件是否是符号链接,如果是,请获取链接到的位置。比如……

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

    【讨论】:

    • os.path.realpath(file) 实际上是更好地回答你的问题
    【解决方案3】:

    你想要@987654321@ 函数。

    【讨论】:

      猜你喜欢
      • 2013-05-08
      • 2013-08-06
      • 1970-01-01
      • 2018-01-09
      • 1970-01-01
      • 2013-06-12
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多