在 运行 cProfile 时获取当前模块
Fetch current module while running cProfile
我想获得我的模块(列出所有函数名称),即使在使用 cProfile 时也是如此。我该怎么做?
澄清一下,我在我自己的模块中使用了一些内省,但是 sys.modules[__main__]
当 运行 -m cProfile
时当然不再 return 我自己的模块了。
要复制,请创建 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'
?
当您将模块作为参数提供给 cProfile
时,您将无法从 sys.modules
获取模块对象。 cProfile
甚至不为你导入模块,它只是执行它,执行完后你甚至无法从 sys.modules
中获取它。
当运行通过-m
开关时,__main__
必然指向cProfile
,没有改变。
您始终可以从 sys.argv[0]
获取模块 name,使用 importlib
自行导入,然后列出函数名称。
我想获得我的模块(列出所有函数名称),即使在使用 cProfile 时也是如此。我该怎么做?
澄清一下,我在我自己的模块中使用了一些内省,但是 sys.modules[__main__]
当 运行 -m cProfile
时当然不再 return 我自己的模块了。
要复制,请创建 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'
?
当您将模块作为参数提供给 cProfile
时,您将无法从 sys.modules
获取模块对象。 cProfile
甚至不为你导入模块,它只是执行它,执行完后你甚至无法从 sys.modules
中获取它。
当运行通过-m
开关时,__main__
必然指向cProfile
,没有改变。
您始终可以从 sys.argv[0]
获取模块 name,使用 importlib
自行导入,然后列出函数名称。