获取我的脚本存储位置的目录

时间:2015-12-24 06:25:57

标签: python

我正在编写一个必须执行shell脚本的Python脚本。在我的GIT仓库中,我计划在我的仓库中的同一目录中提交(Python程序+ Shell脚本)。

我的问题是当有人拿出我的代码并希望从任何相对/绝对位置运行我的Python脚本时 - 我需要在我的Python脚本所在的目录中引用shell脚本。

我不确定应该使用哪一个

os.path.dirname(os.path.realpath(__file__))
OR
os.path.abspath(os.path.dirname(__file__))
OR
os.path.dirname(os.path.abspath(__file__))

如果我在同一目录中运行我的python脚本,它会打印相同的值 - 即使我从一个单独的目录执行并运行我的脚本,如下所述,我仍然得到相同的值:

 python ./test/test1/1.py

/x/home02/myhome/test/test1

如果是这样我应该实际使用哪一个?它们之间有什么区别?

==========更新=========

我为我的代码创建了一个符号链接,如下所述:

cd
ln -s /x/home02/myhome/test/test1/1.py 2.py

现在当我重新运行我的代码时,如下所述 -

cd
python 2.py
cd test
python ../2.py

我得到以下输出

/x/home02/myhome/test/test1
/x/home02/myhome
/x/home02/myhome

所以我认为下面的一个是正确的,因为我总是得到预期的输出:

os.path.dirname(os.path.realpath(__file__))

3 个答案:

答案 0 :(得分:0)

首先,您需要目录,所以让我们使用os.path.dirname(...)

os.path.abspath(__file__)应该为您提供脚本的路径,这与os.path.realpath()之间的区别是后者消除了符号链接,因此不确定您是否需要

所以我使用os.path.dirname(os.path.abspath(__file__))

答案 1 :(得分:0)

os.path.realpathos.path.abspath之间的区别在于前者消除了符号链接,而后者则是符号链接的绝对路径。

在这种情况下,os.path.dirnameabspathrealpath的顺序无关紧要 - 只有传入的文件没有目录部分才有意义

答案 2 :(得分:0)

您应该使用路径名目录名的绝对路径,如下所示:

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

找到常用的路径名操作(os.path)文档,找出这里的用法之间的区别:https://docs.python.org/3/library/os.path.html