我有四个文件a.py,b.py,c.py和d.py. d.py
中的每个文件访问方法import d
a.py
d.init(self)
import d
b.py
d.init(self)
import d
b.py
d.init(self)
如果没有给出与文件名相关的参数,如何在d中查找,从哪个文件调用。只给自己
例如,如果已经从b.py进行了调用,则在d.py中它应该返回带有完整路径的b.py
答案 0 :(得分:2)
from inspect import stack
print stack()[1][1]
stack
的返回值是具有(frame, filename, lineno, function, code_context, index)
值的元组列表。
stack()[0]
是您当前的函数,[1]
是调用框架等。code_context
字符串(默认情况下)是1行源代码,但如果您传递更大的数字到stack()
将提供更多的上下文行:
# print 5 lines of context, 3rd line will be the 'current' line.
print stack(5)[1][-2]
请注意,为堆栈中的每个条目收集代码上下文的成本有些高;为每个条目读取源文件。如果您不使用此功能,请将上下文设置为0
。
演示:
$ cat a.py
import d
d.init()
$ cp a.py b.py; cp a.py c.py
$ cat d.py
import inspect
def init():
print inspect.stack(0)[1][1]
$ python a.py
a.py
$ python b.py
b.py
答案 1 :(得分:0)
您可以修改d.py
中的方法,以获取一个额外的参数,其中包含有关谁正在调用该函数的信息。