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?
10
A
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()
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
@Duncan: ho corretto gli argomenti. – jfs
lo adoro. fantastico lavoro da fare. – hobs