从命令行分析 python 模块
Posted
技术标签:
【中文标题】从命令行分析 python 模块【英文标题】:profiling a python module from the command line 【发布时间】:2019-01-31 16:27:26 【问题描述】:我有一个 python 项目,我使用 -m
标志将应用程序作为模块执行。所以像:
python -m apps.validate -i input.mp4
现在,我想使用命令行对其进行分析。因此,内联示例建议调用 cProfile 本身的模块。但是,我不能这样做:
python -m cProfile apps.validate -i input.mp4
但是,这会导致错误“没有这样的文件或目录”。由于相对导入,我不能只转到apps
目录并启动validate.py
。
有没有办法在命令行上分析模块?
【问题讨论】:
cProfile
online documentation 中有一条“3.7 版中的新功能”注释,说明在该版本中,-m
选项已添加到 cProfile
。这是 Python 解释器自己的 -m
选项的补充,这意味着像 python -m cProfile -m apps.validate -i input.mp4
这样的东西应该可以工作(如果你使用的是 Python 3.7+)。
我明白了。不幸的是,我的东西需要 python 3.6,因为其他一些库不适用于 3.7。我想我需要在代码中使用它。
您可以查看source code 的profile
(和cProfile
)并了解如何添加对新-m
选项的支持。甚至可以将该版本与早期版本的 Python 解释器一起使用(取决于进行了哪些其他更改)。
【参考方案1】:
也许你可以在你的python脚本中使用cProfile,而不是在shell中运行cProfile,方法是在apps.validate中添加一些代码或创建一个新脚本并像这样导入apps.validate。也许下面有一些错字:)
import cProfile
import sys
def run_validate(args):
# run your apps.validate code with shell arguments args here
pass
if __name__ == '__main__':
pr = cProfile.Profile()
pr.enable()
run_validate(*sys.argv)
pr.disable()
pr.print_stats()
然后只需运行原始脚本:python -m apps.validate -i input.mp4
【讨论】:
pr.dump_stats(filename) 会将其保存到文件中。以上是关于从命令行分析 python 模块的主要内容,如果未能解决你的问题,请参考以下文章