gpt4 book ai didi

python - 获取包含调用函数的脚本路径

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:33 27 4
gpt4 key购买 nike

假设我有两个文件,foo.pybar.py。它们位于何处并不重要,只有 foo.py 以某种方式设法导入 bar.py 并调用定义的函数 func()在后者。我如何从 bar.func() 获取 foo.py 的绝对路径?

最佳答案

我不确定“从 bar.func() 获取 foo.py 的绝对路径”是什么意思。但是,函数可以通过使用 sys._getframe() 返回调用堆栈并检查调用函数的全局变量(变量 namespace 在下面的代码中)。这是一个显示如何执行此操作的示例:

foo.py

import bar

bar.func()

bar.py

from pprint import pprint
import sys

def func():
namespace = sys._getframe(1).f_globals # caller's globals
pprint(namespace)
print("caller's path:", namespace['__file__'])

示例输出:

{'__annotations__': {},
'__builtins__': <module 'builtins' (built-in)>,
'__cached__': None,
'__doc__': None,
'__file__': '\\Stack Overflow\\get-path-of-calling-script\\foo.py',
'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0085A7D0>,
'__name__': '__main__',
'__package__': None,
'__spec__': None,
'bar': <module 'bar' from '\\Stack Overflow\\get-path-of-calling-script\\bar.py'>,
'sys': <module 'sys' (built-in)>}
caller's path: \Stack Overflow\get-path-of-calling-script\foo.py

看到返回字典中的'__file__'条目了吗?它是源文件的绝对路径 — foo.py — 包含对 bar.func() 的调用。

关于python - 获取包含调用函数的脚本路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51487645/

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