【问题标题】:Is it possible to set the python -O (optimize) flag within a script?是否可以在脚本中设置 python -O(优化)标志?
【发布时间】:2011-11-23 12:46:28
【问题描述】:

我想根据脚本的命令行参数(如myscript.py --optimizemyscript --no-debug)在python 脚本的运行时 设置优化标志(python -O myscript.py)。我想跳过assert 语句而不把它们全部去掉。或者有没有更好的方法来有效地忽略 python 代码部分。在 C++ 中是否有 #if#ifdef 的 python 等效项?

【问题讨论】:

    标签: python optimization runtime assert conditional-compilation


    【解决方案1】:

    -O是一个编译器标志,你不能​​在运行时设置它,因为那时脚本已经编译好了。

    Python 无法与 #if 等编译器宏相媲美。

    只需编写一个设置这些标志的start_my_project.sh 脚本。

    【讨论】:

      【解决方案2】:
      #!/usr/bin/env python
      def main():
          assert 0
          print("tada")
      
      if __name__=="__main__":
         import os, sys
         if '--optimize' in sys.argv:
            sys.argv.remove('--optimize')
            os.execl(sys.executable, sys.executable, '-O', *sys.argv)
         else:
            main()
      

      【讨论】:

      • 那是因为os.execl() 的参数错误。第二个参数是arg0 而不是arg1。尝试使用os.execl(sys.executable, sys.executable, '-O', *sys.argv) 或实际上几乎任何其他字符串作为第二个参数,它应该可以按预期工作。
      • @Duncan:我已经修正了论点。
      • 很好的解决方法!我永远不想在没有'-OO'的情况下运行,所以我把它改成了if __debug__: os.execl(sys.executable, sys.executable, '-OO', *sys.argv)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 2018-05-19
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多