如何获取用python传递给我的装饰器的函数的文件名?
我想获得被修饰函数的原始文件/脚本名等。我该怎么做如何获取用python传递给我的装饰器的函数的文件名?,python,metaclass,python-datamodel,Python,Metaclass,Python Datamodel,我想获得被修饰函数的原始文件/脚本名等。我该怎么做 def decorate(fn): def wrapped(): return "scriptname: " + fn.scriptname? return wrapped 我试着使用fn.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu但这给了我更多需要的东西。我可以解析该字符串以获得函数名,但我想知道是否有
def decorate(fn):
def wrapped():
return "scriptname: " + fn.scriptname?
return wrapped
我试着使用fn.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
但这给了我更多需要的东西。我可以解析该字符串以获得函数名,但我想知道是否有更优雅的方法来实现它
return "filename: " + fn.func_code.co_filename
但是,这不适用于,您必须回到
inspect.getmodule
。附带说明,在生产代码中依赖此类内容通常是一个糟糕的想法。需要注意的是,这依赖于实现细节,可能无法在CPython之外工作。使用inspect
是实际的正确答案,但是当一行更容易时,为什么要选择正确答案呢|@Matthew Trevor是正确的,inspect
更好,我不知道这一点,而是从gnibbler的回答中学到的。
import inspect
inspect.getfile(fn)