2017-02-17 148 views
0

即使在使用cProfile時,我想要獲取我的模塊(列出所有函數名稱)。我怎樣才能做到這一點?運行cProfile時獲取當前模塊

爲了說明我在自己的模塊中使用了一些自省功能,但sys.modules[__main__]在使用-m cProfile運行時當然不會返回自己的模塊。

要重現,創建modtest.py:

#!/usr/bin/env python3 
import sys 
print(sys.modules[__name__]) 

運行它,就像這樣:

$ ./modtest.py 
<module '__main__' from './modtest.py'> 
$ python -m cProfile ./modtest.py 
<module 'cProfile' from '...cProfile.py'> 

我怎樣才能得到最後一行說from './modtest.py'

回答

1

當您將模塊作爲參數提供給cProfile時,您將無法從sys.modules獲取模塊對象。 cProfile甚至不會爲你導入模塊,它只是執行它,你甚至無法在完成執行後從sys.modules中獲取它。

當通過-m開關運行時,__main__將必然指向cProfile,沒有改變。

您可以隨時從sys.argv[0]中獲取名稱的名稱,然後自行導入importlib,之後列出函數名稱。