Is it possible to set the python -O (optimize) flag within a script?
Asked Answered
A

2

12

I'd like to set the optimize flag (python -O myscript.py) at runtime within a python script based on a command line argument to the script like myscript.py --optimize or myscript --no-debug. I'd like to skip assert statements without iffing all of them away. Or is there a better way to efficiently ignore sections of python code. Are there python equivalents for #if and #ifdef in C++?

Anagnos answered 23/9, 2011 at 9:42 Comment(0)
S
13

-O is a compiler flag, you can't set it at runtime because the script already has been compiled by then.

Python has nothing comparable to compiler macros like #if.

Simply write a start_my_project.sh script that sets these flags.

Spindell answered 23/9, 2011 at 10:15 Comment(0)
E
8
#!/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()
Elisabetta answered 23/9, 2011 at 11:2 Comment(3)
That's because you got the wrong arguments to os.execl(). The second argument is arg0 not arg1. Try using os.execl(sys.executable, sys.executable, '-O', *sys.argv) or in fact pretty much any other string for the second argument and it should work as you expect.Cominform
@Duncan: I've fixed the arguments.Elisabetta
Great work-around! I never want to run without '-OO', so I made it into if __debug__: os.execl(sys.executable, sys.executable, '-OO', *sys.argv) insteadFiddlewood

© 2022 - 2024 — McMap. All rights reserved.