首页 > 解决方案 > 在python中获取最初执行的脚本的路径?

问题描述

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

工作目录

以下片段是我的 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")

我正在运行脚本

工作区

标签: python

解决方案


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

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

import anki

print(anki.__file__)

你会得到anki模块__init__.py文件的位置(或者如果anki只是一个 Python 文件,你会得到文件本身的位置)。


推荐阅读