gpt4 book ai didi

python - 将脚本的目录添加到字符串中

转载 作者:太空狗 更新时间:2023-10-30 03:06:59 24 4
gpt4 key购买 nike

在编写一次性脚本时,通常需要从与脚本相同的目录加载配置文件、图像或其他类似内容。最好这应该继续正确工作,而不管脚本从哪个目录执行,所以我们可能不想简单地依赖当前工作目录。

如果在您使用它的同一个文件中定义,这样的东西可以正常工作:

from os.path import abspath, dirname, join

def prepend_script_directory(s):
here = dirname(abspath(__file__))
return join(here, s)

将相同的函数复制粘贴或重写到每个模块中是不可取的,但是有一个问题:如果将它移到一个单独的库中,并作为函数导入,__file__ 现在正在引用一些其他模块和结果不正确。

我们或许可以使用它,但看起来 sys.argv 可能也不可靠。

def prepend_script_directory(s):
here = dirname(abspath(sys.argv[0]))
return join(here, s)

如何稳健且正确地编写prepend_script_directory

最佳答案

每当我执行脚本时,我个人都会将 os.chdir 放入脚本的目录中。它只是:

import os
os.chdir(os.path.split(__file__)[0])

但是,如果您确实想将这个东西重构到一个库中,那么您本质上需要一个了解其调用者状态的函数。因此,您必须做到这一点

prepend_script_directory(__file__, blah)

如果你只是想写

prepend_script_directory(blah)

您必须使用栈帧来执行特定于 cpython 的技巧:

import inspect

def getCallerModule():
# gets globals of module called from, and prints out __file__ global
print(inspect.currentframe().f_back.f_globals['__file__'])

关于python - 将脚本的目录添加到字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6566642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com