从命令行分析python模块

从命令行分析python模块,python,profiling,cprofile,Python,Profiling,Cprofile,我有一个python项目,其中我使用-m标志作为模块执行应用程序。比如: python -m apps.validate -i input.mp4 python -m cProfile apps.validate -i input.mp4 现在,我想使用命令行来分析它。因此,内联示例建议将cProfile本身作为一个模块调用。但是,我不能这样做: python -m apps.validate -i input.mp4 python -m cProfile apps.validate -i

我有一个python项目,其中我使用-m标志作为模块执行应用程序。比如:

python -m apps.validate -i input.mp4
python -m cProfile apps.validate -i input.mp4
现在,我想使用命令行来分析它。因此,内联示例建议将cProfile本身作为一个模块调用。但是,我不能这样做:

python -m apps.validate -i input.mp4
python -m cProfile apps.validate -i input.mp4
但是,这会导致错误:没有这样的文件或目录。由于存在相对导入,我无法直接转到apps目录并启动validate.py


有没有办法在命令行上评测模块?

与在shell中运行cProfile不同,您可以在python脚本中使用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

而不是在shell中运行cProfile,也许您可以通过在apps.validate中添加一些代码或创建一个新脚本并像这样导入apps.validate,在python脚本中使用cProfile。可能是下面的一些打字错误:

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

在3.7版的cProfile中有一个新的注释,说明在该版本的cProfile中添加了a-m选项。这是对Python解释器自己的-m选项的补充,这意味着如果您使用的是Python 3.7+,Python-m cProfile-m apps.validate-i input.mp4应该可以工作。我明白了。不幸的是,我的东西需要Python3.6,因为其他一些库不能使用3.7。我想我需要在代码中使用它。您可以查看for profile和cProfile,了解如何添加对new-m选项的支持。甚至可以将该版本与早期版本的Python解释器一起使用,具体取决于所做的其他更改。这是对Python解释器自己的-m选项的补充,这意味着如果您使用的是Python 3.7+,Python-m cProfile-m apps.validate-i input.mp4应该可以工作。我明白了。不幸的是,我的东西需要Python3.6,因为其他一些库不能使用3.7。我想我需要在代码中使用它。您可以查看for profile和cProfile,了解如何添加对new-m选项的支持。甚至可以将该版本与早期版本的Python解释器一起使用,具体取决于所做的其他更改。pr.dump_statsfilename会将其保存到文件中。pr.dump_statsfilename会将其保存到文件中。