Скажите, если Python в интерактивном режиме
в скрипте Python есть ли способ узнать, находится ли интерпретатор в интерактивном режиме? Это было бы полезно, например, при запуске интерактивного сеанса Python и импорте модуля выполняется немного другой код (например, ведение журнала отключено).
Я посмотрел на скажите, находится ли python в режиме-i и попробовал код там, однако, эта функция возвращает true только если Python был вызван с флагом-i, а не когда для вызова интерактивного режима используется команда python
без аргументов.
Я имел в виду что-то вроде этого:
if __name__=="__main__":
#do stuff
elif __pythonIsInteractive__:
#do other stuff
else:
exit()
6 ответов
__main__.__file__
не существует в интерактивном интерпретаторе:
import __main__ as main
print hasattr(main, '__file__')
Это также относится к запуску кода через python -c
, а не python -m
.
С TFM: если параметр интерфейса не задан, - I подразумевается, sys.argv[0] является пустой строкой ( "" ), и текущий каталог будет добавлен в начало sys.путь.
если пользователь вызвал интерпретатор с python
и никаких аргументов, как вы упомянули, Вы можете проверить это с помощью if sys.argv[0] == ''
. Это также возвращает true, если началось с python -i
, но по документам они совпадают.
использовать sys.flags
:
if sys.flags.interactive:
#interactive
else:
#not interactive
следующее работает как с переключателем-i, так и без него:
#!/usr/bin/python
import sys
# Set the interpreter bool
try:
if sys.ps1: interpreter = True
except AttributeError:
interpreter = False
if sys.flags.interactive: interpreter = True
# Use the interpreter bool
if interpreter: print 'We are in the Interpreter'
else: print 'We are running from the command line'
вот то, что будет работать. Поместите следующий фрагмент кода в файл и назначьте путь к этому файлу PYTHONSTARTUP
переменные среды.
__pythonIsInteractive__ = None
и тогда вы можете использовать
if __name__=="__main__":
#do stuff
elif '__pythonIsInteractive__' in globals():
#do other stuff
else:
exit()
http://docs.python.org/tutorial/interpreter.html#the-interactive-startup-file