python - 如何确定 pythondecorator 函数中的被调用者详细信息?

标签 python import filenames decorator instrumentation

我的目标是在方法执行期间查找文件的名称。主要问题是我使用 python 装饰器来转换函数。该装饰器位于单独的文件中,并被导入到当前文件中。我用下面的一个小场景解释了这个问题:

代码场景

#Normal.py

import decorator

 class A:
    @entryExit
    def move(self):
        print "hello"    

a=A()
a.move()

#decorator.py
import sys
import inspect
def entryExit(f):
    def new_f(self,*args, **kwargs):
        File_Name=inspect.getfile(inspect.currentframe()).split("\\")
        print 'Entry',f.__name__,self.__class__.__name__,File_Name[-1]
        f(self,*args)        
        print 'Exit',f.__name__,self.__class__.__name__,File_Name[-1]        
    return new_f 

Actual Output:
Entry move A decorator.py
hello
Exit move A decorator.py

Needed Output:
Entry move A Normal.py
hello
Exit move A Normal.py

我可以从“实际输出”中了解到装饰器已导入,每次调用方法时,它都会转到“decorator.py”文件并执行,因此我们得到“实际输出”中显示的输出。

无论如何,我可以获得所需的输出,但同时仍导入 Decorator.py 文件吗?

最佳答案

将您的 File_Name 分配更改为:

File_Name = inspect.getfile(f)

做你想做的事。
inspect.getfile() 将一个对象作为参数,f 表示包装的函数。

来源:http://docs.python.org/2/library/inspect.html#inspect.getfile

关于python - 如何确定 pythondecorator 函数中的被调用者详细信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839322/

相关文章:

javascript - NPM模块导入时抛出错误

perl - Unicode 规范化 - 文本文件中的文件名与文件系统上的文件名

Java 8 : How to list files that don't match pattern using regex

python - 如何将文件内容排序到列表中

javascript - cmake/OpenCVCompilerOptimizations.cmake:505(消息)的CMake错误:编译器不支持基准优化标志

mysql - 如何自定义从 Mysql 到 HBase 的 Sqoop 导入序列化?

csv - Flutter:如何从简单的电子表格中读取数据?

python - 在 python 中列出 "quirk"

python - 你能更新 Python3 的 QPython3 版本吗?

java - 获取文件夹中所有文件的文件名