Скажите, если 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.


sys.ps1 и sys.ps2 определены только в интерактивном режиме.


С 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