我希望python向我显示已执行了哪个函数以及从哪个文件......因此,我将其作为test1.py
import sys,os, test2
def some_function():
print (sys._getframe().f_code.co_name +" "+ os.path.basename(__file__) , 'executed')
print (test2.function_details(), 'executed')
test2.py
是:
import sys,os
def function_details():
return sys._getframe().f_code.co_name + " " +os.path.basename(__file__)
现在我运行它
import test1
test1.some_function()
我得到以下输出:
('some_function test1.pyc', 'executed')
('function_details test2.pyc', 'executed')
当我尝试创建一个函数来调用执行的文件和函数时,它会告诉我我创建的子函数而不是原始的子函数。
我的问题是如何修改test2.py
使其输出
('some_function test1.pyc', 'executed')
('some_function test1.pyc', 'executed')
答案 0 :(得分:1)
CAST
有两个问题:
REPLACE
,因此您需要向上移动一帧才能到达调用帧。为此,您将function_details
传递给function_details
。1
是您碰巧所在的模块(如果定义)的当前文件名,需要用关联的sys._getframe
对象的__file__
属性替换框架正确。更正了这两件事,我们将function_details重新定义为:
co_filename
将产生所需的结果。我认为,f_code
模块完成同一件事远比直接使用def function_details():
code_obj = sys._getframe(1).f_code
return " ".join([code_obj.co_name, os.path.basename(code_obj.co_filename)])
好。这是使用inspect编写的新function_details:
inspect