【发布时间】:2012-11-05 14:26:03
【问题描述】:
我想同时运行 cProfiler(主要用于时间测量)和我找到的内存分析器 here。但是,两者都需要给出 -m 命令行参数,这并不能很好地发挥作用。
有没有办法让两者都运行?到目前为止,我所做的只是让翻译对我大喊大叫。
如果您需要更多信息,请告诉我,我会尽力提供。提前致谢!
【问题讨论】:
标签: python command-line arguments
我想同时运行 cProfiler(主要用于时间测量)和我找到的内存分析器 here。但是,两者都需要给出 -m 命令行参数,这并不能很好地发挥作用。
有没有办法让两者都运行?到目前为止,我所做的只是让翻译对我大喊大叫。
如果您需要更多信息,请告诉我,我会尽力提供。提前致谢!
【问题讨论】:
标签: python command-line arguments
不能使用两个-m 参数来启动两个模块。这是因为-m 之后的命令行参数都以sys.argv 的形式提供给命名模块。这在文档中没有明确描述,但您可以通过实验进行尝试。
创建两个python文件a.py和b.py。
a.py的内容:
print 'a'
import sys
print sys.argv
b.py的内容:
print 'b'
现在尝试使用两个 -m 参数运行两者:
$ python -m a -m b
输出:
a
['/home/lesmana/tmp/a.py', '-m', 'b']
如您所见,模块 b 从未启动,因为第二个 -m 未由 python 处理。交给模块a处理。
【讨论】:
虽然我现在很明显不能在同一个文件上使用两个 -m 参数,但我设法将一些解决方案组合在一起。不过,它有点迂回,并不完全完美。 我使用了 2 个 .bat 文件,可以看到 here。左侧是处理 cProfiler 的 .bat,右侧是处理内存分析器的 .bat。
在处理内存分析器的.bat 中看到的python 程序的代码可以在here 和here 中看到。
第一个程序在我的主代码here中的函数正上方的行中添加#,这意味着程序可以实际运行,cProfiler可以做它的事情。
第二个程序删除了#,这意味着内存分析器可以工作。
为了让这个系统与我的布局正常工作,首先需要将“@profile”注释掉。
它有点笨拙,并且可以使用一些改进来进一步自动化它(例如必须在处理内存分析器的 .bat 文件中指定文件的名称),但它现在就可以了。我也意识到这是一个非常具体的案例,但谁知道呢,也许有人和我处于完全相同的位置......
【讨论】: