Я считаю, что причина, по которой вы используете #!/usr/bin/env python
, заключается в том, что вы можете использовать PATH
, чтобы найти вашу любимую версию python
.
Если это НЕ тот случай, и вы в порядке, используя /usr/bin/python
(или какой-либо другой жестко закодированный путь к интерпретатору), то самым прямым решением должно быть использование #!/usr/bin/python -O
, как предложено @ keith-thompson
Однако, если вы хотите продолжать полагаться на PATH
, чтобы найти python
, вам потребуется вызвать оболочку, чтобы получить контроль над командной строкой:
#!/bin/sh
exec python -O - "$@" <<EOF
# ... your python code starts here ...
if __name__ == '__main__':
if __debug__:
print 'lots of debugging output on'
print 'Fin'
# ... your python code ends here ...
EOF
Это похоже на решение pythono
, предложенное @unutbu, за исключением того, что оно не полагается на PATH
при поиске промежуточного сценария, что означает, что он немного лучше работает и немного более безопасен.
Недостатком этого решения является смешивание двух языков, что означает, что вы не можете просто сказать python myscript.py
, чтобы выполнить код с __debug__
, установленным на True
. Если вы собираетесь выполнять код иногда напрямую через скрипт (например, ~/bin/myscript.py
) с включенным -O
, но в других случаях запускать скрипт вручную в среде отладки (например, python ~/bin/myscript.py
) с помощью -O
выключен, тогда я считаю, что вам лучше всего использовать экспертные приемы, подобные предложению @ ade-yu, или использовать простой параметр pythono
, предложенный @ unutbu.
Надеюсь, это поможет!