2017-02-17 1 views
0

Je voudrais obtenir le nom de mon module (pour lister tous les noms de fonctions), même en utilisant cProfile. Comment puis je faire ça?Récupérer le module en cours d'exécution cProfil

Pour clarifier j'utilise une certaine introspection dans mon propre module, mais sys.modules[__main__] ne renvoient bien sûr pas mon propre module en cours d'exécution avec -m cProfile.

Reproduire, créez modtest.py:

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

utilisez-le comme:

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

Comment puis-je obtenir cette dernière ligne dire from './modtest.py'?

Répondre

1

Vous ne pourrez pas extraire l'objet module de sys.modules lorsque vous fournissez le module en tant qu'argument à cProfile. cProfile ne même pas importer le module pour vous, il suffit de l'exécuter, vous ne seriez même pas en mesure de l'attraper de sys.modules après son exécution. Lorsqu'il est exécuté via le commutateur -m, le __main__ pointera nécessairement sur cProfile, cela ne changera rien.

Vous pouvez toujours saisir le module nom de sys.argv[0], importer vous-même avec importlib et liste ensuite les noms de fonction.