我需要从callee获取调用者信息(什么文件/什么行)。我了解到我可以使用inpect模块来达到目的,但不完全是如何。
如何通过检查获取这些信息?或者有没有其他方法来获取信息?
import inspect
print __file__
c=inspect.currentframe()
print c.f_lineno
def hello():
print inspect.stack
?? what file called me in what line?
hello()
答案 0 :(得分:82)
来电者的帧比当前帧高一帧。您可以使用inspect.currentframe().f_back
查找来电者的相框。
然后使用inspect.getframeinfo获取呼叫者的文件名和行号。
import inspect
def hello():
previous_frame = inspect.currentframe().f_back
(filename, line_number,
function_name, lines, index) = inspect.getframeinfo(previous_frame)
return (filename, line_number, function_name, lines, index)
print(hello())
# (<frame object at 0x8ba7254>, '/home/unutbu/pybin/test.py', 10, '<module>', ['hello()\n'], 0)
答案 1 :(得分:42)
我建议改为使用inspect.stack
:
import inspect
def hello():
frame,filename,line_number,function_name,lines,index = inspect.stack()[1]
print(frame,filename,line_number,function_name,lines,index)
hello()
答案 2 :(得分:1)
我发布了一个用于检查的包装器,其中简单的堆栈帧寻址通过单个参数spos
覆盖堆栈帧:
E.g。 pysourceinfo.PySourceInfo.getCallerLinenumber(spos=1)
其中spos=0
是lib函数,spos=1
是调用者,spos=2
是调用者的调用者,等等。
答案 3 :(得分:-5)
如果调用者是主文件,只需使用sys.argv [0]