2017-02-17 14 views
0

cProfileを使用している場合でも、私のモジュールを知りたい(すべての関数名をリストアップしたい)。どうやってやるの?cProfileの実行中に現在のモジュールを取得する

明確にするために、私自身のモジュールでいくつかのイントロスペクションを使用していますが、-m cProfileで実行すると、sys.modules[__main__]は自分のモジュールを返さないことはもちろんです。

、再現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でそれを自分でインポートし、その後の関数名を一覧表示することができます。

関連する問題