是否可以在脚本中设置python -O(optimize)标志?

hob*_*obs 10 python optimization assert runtime conditional-compilation

我想在python脚本python -O myscript.py运行时根据脚本的命令行参数设置optimize flag(),如myscript.py --optimizemyscript --no-debug.我想跳过assert声明,而不是把它们全部丢掉.或者是否有更好的方法来有效地忽略python代码的各个部分.是否有蟒蛇等价物#if,并#ifdef在C++?

Joc*_*zel 12

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

Python没有类似于编译器宏的可比性#if.

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


jfs*_*jfs 7

#!/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()
Run Code Online (Sandbox Code Playgroud)

  • 那是因为你得到了'os.execl()`的错误参数.第二个参数是`arg0`而不是'arg1`.尝试使用`os.execl(sys.executable,sys.executable,' - O',*sys.argv)`或实际上几乎任何其他字符串用于第二个参数,它应该按预期工作. (2认同)