假设我有两个文件,foo.py并且bar.py. 它们位于何处并不重要,只要以foo.py某种方式设法导入并调用后者中定义的bar.py函数即可。func()我如何获得foo.pyfrom的绝对路径bar.func()?
我不确定“获取foo.pyfrom的绝对路径bar.func()”是什么意思。但是,函数可以通过使用返回sys._getframe()调用堆栈并检查调用函数的全局变量(namespace下面代码中的变量)来确定谁在运行时调用它。下面的示例展示了如何执行此操作:
foo.py
import bar\n\nbar.func()\nRun Code Online (Sandbox Code Playgroud)\nbar.py
from pprint import pprint\nimport sys\n\ndef func():\n namespace = sys._getframe(1).f_globals # caller\'s globals\n pprint(namespace)\n print("caller\'s path:", namespace[\'__file__\'])\nRun Code Online (Sandbox Code Playgroud)\n示例输出:
\nimport bar\n\nbar.func()\nRun Code Online (Sandbox Code Playgroud)\n看到\'__file__\'返回的字典中的条目了吗?它是源文件 \xe2\x80\x94 foo.py\xe2\x80\x94 的绝对路径,其中包含对bar.func().