python - 获取包含调用函数的脚本路径
问题描述
假设我有两个文件,foo.py
并且bar.py
. 它们的位置无关紧要,只是以foo.py
某种方式设法导入bar.py
和调用func()
后者中定义的函数。我将如何获得foo.py
from的绝对路径bar.func()
?
解决方案
我不确定“获取foo.py
from的绝对路径”是什么意思bar.func()
。但是,函数可以通过使用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 - Python:根据另一个字符串对相似字符串的列表进行排序
- node.js - 如何在 sequelize 中创建查询
- powershell - 如何检查文件是否包含任何行?
- python - 如何在 python docx 模板(docxtpl)中显示图像?Django Python
- javascript - WhatsApp 使用 Android 中的 expo 共享库共享(React-native)
- docker - 警告:ptrace:功能未实现在启动期间程序退出,代码为 127
- javascript - 如果条件没有被调用,则 JavaScript 中的函数
- python - 如何在 django 中运行先前设置的环境?
- c# - 如何以检索整行值的方式绑定单选按钮(在 HTML 表中)?(布雷泽)
- kubernetes - 在不同节点上运行的 K8s pod 无法相互通信