2013-07-24 28 views
1

我的目標是在方法執行期間找到文件的名稱。主要問題是我使用python裝飾器來轉換一個函數。這個裝飾器在一個單獨的文件中並被導入到當前文件中。我已經解釋過用下面一個小場景的問題:如何確定pythondecorator函數中的被調用者詳細信息?

代碼情景

#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 

我可以從「實際輸出」的裝飾導入並每次調用方法時,瞭解它去「裝飾.py「文件並執行,因此我們得到的輸出顯示在」實際輸出「中。

是否有我可以得到需要的輸出,但仍然在我導入Decorator.py文件?

回答