2011-09-23 5 views
10

Vorrei impostare il flag di ottimizzazione (python -O myscript.py) al runtime all'interno di uno script python basato su un argomento della riga di comando sullo script come myscript.py --optimize o myscript --no-debug. Mi piacerebbe saltare le dichiarazioni assert senza allontanarle tutte. O c'è un modo migliore per ignorare in modo efficiente le sezioni del codice Python. Esistono equivalenti python per #if e #ifdef in C++?È possibile impostare il flag python -O (ottimizzazione) all'interno di uno script?

risposta

12

-O è un flag di compilazione, non è possibile impostarlo in fase di esecuzione perché lo script è già stato compilato da allora.

Python non ha nulla di paragonabile ai macro del compilatore come #if.

Basta scrivere uno script start_my_project.sh che imposta questi flag.

6
#!/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

Ecco perché hai ottenuto gli argomenti errati su 'os.execl()'. Il secondo argomento è 'arg0' non' arg1'. Prova a usare 'os.execl (sys.executable, sys.executable, '-O', * sys.argv)' o in effetti praticamente qualsiasi altra stringa per il secondo argomento e dovrebbe funzionare come ti aspetti. – Duncan

+0

@Duncan: ho corretto gli argomenti. – jfs

+0

lo adoro. fantastico lavoro da fare. – hobs