【问题标题】:Fetch current module while running cProfile在运行 cProfile 时获取当前模块
【发布时间】:2017-02-17 13:44:33
【问题描述】:

我想获得我的模块(列出所有函数名称),即使在使用 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'

【问题讨论】:

    标签: python python-3.x python-module cprofile


    【解决方案1】:

    当您将模块作为参数提供给cProfile 时,您将无法从sys.modules 获取模块对象。 cProfile 甚至不会为您导入模块,它只是执行它,执行完成后您甚至无法从 sys.modules 获取它。

    当通过-m 开关运行时,__main__ 必然指向cProfile,没有任何改变。

    您总是可以从sys.argv[0] 中获取模块名称,然后使用importlib 自己导入它,然后列出函数名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 2015-01-12
      • 2019-06-08
      • 2011-03-05
      相关资源
      最近更新 更多