13

我想同时运行 cProfiler(主要用于时间测量)和我在这里找到的内存分析器。但是,两者都需要给出 -m 命令行参数,这并不能很好地发挥作用。

有没有办法让两者都运行?到目前为止,我所能做的就是让翻译对我大喊大叫。

如果您需要更多信息,请告诉我,我会尽力提供。提前致谢!

4

2 回答 2

7

-m使用两个参数启动两个模块是不可能的。这是因为后面的命令行参数-m都以sys.argv. 这在文档中没有明确描述,但您可以通过实验进行尝试。

创建两个 python 文件a.pyb.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 来处理。

于 2012-11-19T15:02:49.140 回答
0

虽然现在对我来说很明显你不能在同一个文件上使用两个 -m 参数,但我设法将一些解决方案组合在一起。不过,它有点迂回,并不完全完美。我使用了 2 个 .bat 文件,可以在这里看到。左侧是处理 cProfiler 的 .bat,右侧是处理内存分析器的 .bat。

可以在此处此处查看在处理内存分析器的 .bat 中看到的 python 程序的代码。

第一个程序在我这里的主要代码中的函数正上方的行中添加了# ,这意味着程序可以实际运行,cProfiler 可以做它的事情。

第二个程序删除了#,这意味着内存分析器可以工作。

为了使该系统与我的布局正常工作,首先需要将“@profile”注释掉。

它有点笨拙,可以使用一些改进来进一步自动化它(例如必须在处理内存分析器的 .bat 文件中指定文件的名称),但它现在就可以了。我也意识到这是一个非常具体的案例,但谁知道呢,也许有人和我处于完全相同的位置......

于 2012-11-19T21:45:17.300 回答