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

问题描述:

我想设置优化标志(python -O myscript.py)在运行时内的一个python脚本基于命令行参数的脚本如myscript.py --optimizemyscript --no-debug。我想跳过assert声明,而不会将所有声明都删除。或者有没有更好的方法来高效地忽略Python代码的部分。在C++中有#if#ifdef的python等价物吗?是否可以在脚本中设置python -O(优化)标志?

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

Python与编译器宏如#if没有任何可比性。

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

#!/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() 
+2

这是因为你得到了'os.execl()'的错误参数。第二个参数是'arg0'而不是'arg1'。尝试使用'os.execl(sys.executable,sys.executable,'-O',* sys.argv)'或其他几乎任何其他字符串作为第二个参数,它应该按照您的预期工作。 – Duncan

+0

@Duncan:我已经解决了争论。 – jfs

+0

爱它。真棒解决方法。 – hobs