是否可以在脚本中设置python -O(优化)标志?
问题描述:
我想设置优化标志(python -O myscript.py
)在运行时内的一个python脚本基于命令行参数的脚本如myscript.py --optimize
或myscript --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()
这是因为你得到了'os.execl()'的错误参数。第二个参数是'arg0'而不是'arg1'。尝试使用'os.execl(sys.executable,sys.executable,'-O',* sys.argv)'或其他几乎任何其他字符串作为第二个参数,它应该按照您的预期工作。 – Duncan
@Duncan:我已经解决了争论。 – jfs
爱它。真棒解决方法。 – hobs