2014-09-03 35 views
-1

有沒有什麼方法可以獲得與傳遞給修飾器函數的函數對象相對應的文件的路徑?檢測修飾函數的定義路徑

最後我需要一個文件的目錄。

def mydec(arg): 
    def dec_inner(func): 
     def wrapper(*args, **kwargs): 
      # how to detect a path where func is defined? 
     return wrapper 
    return dec_inner 
+0

你的意思是模塊的名稱('func .__ module__')? – jonrsharpe 2014-09-03 16:05:47

+0

@jonrsharpe號我的意思是類似於os.path.realpath()的結果。 – sergzach 2014-09-03 16:08:16

+1

那麼,一旦你有模塊名稱,你可以找到模塊路徑 - 請參閱http://stackoverflow.com/q/247770/3001761 - 例如,'sys.modules [func .__ module __] .__ file__'。 – jonrsharpe 2014-09-03 16:09:14

回答

2

你可以找到一個函數來自使用__module__屬性模塊的名稱:

>>> from random import choice 
>>> choice.__module__ 
'random' 

您可以通過sys.modules dictionary得到它的名字模塊:

>>> sys.modules['random'] 
<module 'random' from 'C:\Python27\lib\random.pyc'> 

而文件路徑本身來自module屬性__file__。把所有這些放在一起:

>>> sys.modules[choice.__module__].__file__ 
'C:\\Python27\\lib\\random.pyc'