Python:不同文件中调用文件的名称

时间:2013-07-03 19:07:02

标签: python function pointers

我有四个文件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

2 个答案:

答案 0 :(得分:2)

使用inspect.stack() function

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中的方法,以获取一个额外的参数,其中包含有关谁正在调用该函数的信息。