获取Python中最初执行的脚本的路径?

时间:2019-12-19 19:20:33

标签: python

我有以下工作目录,从中运行ankiAdd.py-在此脚本中,有一次我要访问硬盘驱动器上其他位置的另一个python程序的“内部API”,以便使用其中一些功能。我想获取存储“ ankiAdd.py”的工作目录,但是我一直在检索另一个目录。

Working directory

以下代码段是我的ankiAdd.py脚本中的一个函数。集合从我的硬盘上安装了另一个程序Anki的另一个目录中导入。我希望file_pattern变量提供此脚本的目录,而不是当前正在发生的cpath目录。

sys.path.append("C:/Users/Shaun/Documents/Personal_Projects/ankiExperiment/anki-scripting/anki")
from anki.storage import Collection
PROFILE_HOME = os.path.expanduser("C:/Users/Shaun/Desktop/User 1")
cpath = os.path.join(PROFILE_HOME, "collection.anki2")

@eel.expose
def callLoad():
    col = Collection(cpath, log=True)
    json_pattern = "word_data.json"
    file_pattern = os.path.join(os.getcwd(),json_pattern)
    load(col,file_pattern)

我已经尝试了很多类似os.getcwd()和os.path.dirname(os.path.realpath( file ))的方法,但是我一直以检索C:\ Users \ User结尾\ Desktop \ User 1 \ collection.media,它是cpath的位置。如何获取ankiAdd.py的目录,该目录最初是运行的脚本?

编辑:

def callLoad():
    col = Collection(cpath, log=True)
    json_pattern = "word_data.json"
    print(os.path.dirname(os.path.realpath(__file__)))
    file_pattern = os.path.join(os.getcwd(),json_pattern)
    #load(col,file_pattern)

if __name__ == '__main__':
callLoad()

如果我运行此代码,则返回的目录为C:\ Users \ Shaun \ Desktop \ User 1 \ collection.media,这是在文件顶部由此设置的目录:

PROFILE_HOME = os.path.expanduser("C:/Users/Shaun/Desktop/User 1")

我正在从

运行脚本

workspace

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,则您正在尝试获取要导入的文件或模块的位置,并继续获取正在执行的文件或模块的位置。这可以解决!

您导入的所有内容都将具有__file__属性。例如,如果您有

import anki

print(anki.__file__)

您将获得anki模块的__init__.py文件的位置(或者,如果anki只是Python文件,则将获得文件本身的位置)。

答案 1 :(得分:0)

文件返回执行脚本的位置。你可以试试看。

print(__file__)