Подтвердить что ты не робот

Скажите, работает ли Python в интерактивном режиме

В Python script есть ли способ определить, работает ли интерпретатор в интерактивном режиме? Это было бы полезно, например, когда вы запускаете интерактивный сеанс Python и импортируете модуль, выполняется несколько другой код (например, ведение журнала отключается).

Я посмотрел на сообщите, находится ли python в режиме -i, и попробовал там код, однако эта функция возвращает только true, если Python был вызван с помощью -i, а не когда команда, используемая для вызова интерактивного режима, python без аргументов.

Что я имею в виду, это примерно так:

if __name__=="__main__":
    #do stuff
elif __pythonIsInteractive__:
    #do other stuff
else:
    exit()
4b9b3361

Ответ 1

__main__.__file__ не существует в интерактивном интерпретаторе:

import __main__ as main
print hasattr(main, '__file__')

Это также относится к прогону кода через python -c, но не python -m.

Ответ 2

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

Ответ 3

Из TFM: Если не задана опция интерфейса, -i подразумевается, sys.argv [0] является пустой строкой ( "" ), и текущий каталог будет добавлен в начало sys.path.

Если пользователь вызвал интерпретатор с помощью python и никаких аргументов, как вы упомянули, вы можете проверить это с помощью if sys.argv[0] == ''. Это также возвращает true, если начато с python -i, но, согласно документам, они функционально одинаковы.

Ответ 4

Используйте sys.flags:

if sys.flags.interactive:
    #interactive
else:
    #not interactive 

Ответ 5

Следующее работает как с ключом -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'

Ответ 6

Вот что-то, что сработает. Поместите следующий фрагмент кода в файл и назначьте путь к этому файлу переменной среды 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