我希望能夠從導入的模塊中動態檢索當前正在執行的模塊或類名。下面是一些代碼:如何在Python中訪問當前正在執行的模塊或類名?
foo.py:
def f():
print __name__
bar.py:
from foo import f
def b(): f()
這顯然不爲__name__
工作是包含模塊的名稱功能。我想在foo
模塊內部訪問的是當前使用foo
的執行模塊的名稱。所以在上面的情況下,它將是bar
,但是如果有任何其他模塊導入foo
,我希望foo
動態訪問該模塊的名稱。
編輯:該inspect
模塊看起來很有前途,但它不是我正在尋找。我所希望的是我可以訪問的某種全局或環境級別的變量,它包含當前執行模塊的名稱。並不是說我不願意遍歷堆棧來查找這些信息 - 我只是認爲Python可能已經公開了這些數據。
編輯:這是我如何使用這個。我有兩個不同的Django應用程序,都需要將錯誤記錄到文件。可以說他們被稱爲「AppOne」和「AppTwo」。我也有一個我想要登錄這些文件的地方:「/home/hare/app_logs
」。在任何給定點的每個應用程序中,我希望能夠導入我的記錄器模塊並調用將日誌字符串寫入文件的日誌函數。但是我想要做的是創建一個名爲app_logs
的目錄,它是當前應用程序的名稱(「AppOne」或「AppTwo」),以便每個應用程序的日誌文件將放入其各自的日誌目錄中。
爲了做到這一點,我認爲最好的方式是記錄器模塊有權訪問某種表示當前應用程序名稱的全局變量,因爲它負責知道父記錄目錄的位置,如果應用程序的日誌目錄尚不存在,則創建它。
你爲什麼要打破這樣的責任分配? – 2009-03-02 16:06:28
我在一個日誌記錄模塊中使用它 - 我想能夠告訴哪個外部模塊正在嘗試記錄,而無需調用者傳遞某種密鑰。 – 2009-03-02 16:10:25
您是否正在尋找啓動程序執行的模塊(即:__name__ =='__main__'的模塊?或者直接稱爲foo.f()的模塊,每次foo.f()都可能不同所謂的「 – 2009-03-02 16:18:39