从命令行分析 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

有没有办法在命令行上分析模块?

【问题讨论】:

cProfileonline 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 模块的主要内容,如果未能解决你的问题,请参考以下文章

如何从命令行调试使用 python -m 运行的 Python 模块?

从命令行运行 python 要求我导入模块

导入 python 模块以使脚本能够从命令行运行

用于命令行脚本和导入模块的 Python“模板”模块

python命令行运行py文件找不到模块的解决办法

Python 命令行参数解析: optparse 模块