【问题标题】:Multiple -m command line arguments (Python)多个 -m 命令行参数(Python)
【发布时间】:2012-11-05 14:26:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: python command-line arguments


    【解决方案1】:

    不能使用两个-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处理。

    【讨论】:

    • 感谢您的回答!最后制作了一些其他 python 文件和 .bat 文件来稍微自动化它。我将在另一个答案中详细说明我是如何做到的。
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-12-08
      • 2015-11-30
      • 2012-02-20
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      相关资源
      最近更新 更多