我有四个文件 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
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
您可以修改方法d.py
以接受一个额外的参数,其中包含有关谁调用该函数的信息。