从调用脚本获取__file__

时间:2017-11-22 15:23:03

标签: python path

我有十几个脚本,我在重复这个

# caller.py
THIS_FILE_DIR = os.path.dirname(os.path.realpath(__file__))
relative_path = lambda *x: os.path.join(THIS_FILE_DIR, *x)

我想把它移到一个模块中,如下所示:

# module.py
def relative_path(*x):
    this_file_dir = os.path.dirname(os.path.realpath(__file__))
    return os.path.join(this_file_dir, *x)

但是,我希望__file__在调用脚本(caller.py)的范围内而不是模块(module.py)本身。有没有办法在__file__没有调用脚本的情况下执行此操作(因此我的relative_path()方法只需要*x)?

2 个答案:

答案 0 :(得分:0)

导入的函数无法访问导入[function]的模块的全局变量。

relative_path()函数无法访问__file__的{​​{1}}。

您可以将其作为参数传递:

caller.py

答案 1 :(得分:0)

其实是有可能的。您可以像这样获取来电者的路径

import inspect

def relative_path(*x):
    caller_path = inspect.stack()[1].filename

然后你就有了绝对路径的字符串(如果需要,建议使用 pathlib 而不是 os)

传递文件不是必需的,可能会造成混淆...