Сообщить об ошибке.

Режимы интерфейса интерпретатора Python

Интерфейс интерпретатора похож на интерфейс оболочки UNIX, но предоставляет несколько дополнительных методов вызова:

  • При вызове со стандартным вводом, подключенным к tty-устройству, он запрашивает команды и выполняет их до тех пор, пока не достигнет EOF - символ конца файла.
  • Когда вызывается с аргументом имени файла или с файлом в качестве стандартного ввода, он читает и выполняет сценарий из этого файла.
  • При вызове с аргументом имени каталога он читает и выполняет сценарий с соответствующим именем из этого каталога.
  • При вызове с конструкцией -c command Python он выполняет оператор(ы) Python, заданные как команды command. Здесь command может содержать несколько операторов, разделенных символом перевода строки. Ведущие пробелы, необходимые при выделении блока кода, так же должны присутствовать!
  • Когда вызывается с конструкцией -m module-name, данный модуль находится в пути модуля Python и выполняется как скрипт.

В не интерактивном режиме весь ввод анализируется перед его выполнением.

Вариант интерфейса завершает список опций, используемых интерпретатором, все последовательные аргументы заканчиваются на sys.argv - обратите внимание, что первый элемент, нулевой индекс sys.argv[0] является строкой, отражающей источник программы.

-c <command>:

Конструкция python3 -c <command> выполняет код Python в command. Команда command может быть одним или несколькими операторами, разделенными символами новой строки \n, с пробелами в начале, как в обычном коде модуля.

Обратите внимание, что нет способа использовать escape-символы \n в командной строке bash. Что бы использовать конструкцию -c <command> и заставить Python выполнить строку не имеющую отступов, подобных циклам или функциям, используйте сомволом ';' для разделения команд:

$ python3 -c "import sys;print(sys.argv[0]);line = 'Hello World';print(line)"
 -c
 Hello World

Если нужно выполнить строку, содержащую отступы, которые используются в многострочных конструкциях, таких как for ... in или def, используйте инструкцию канала bash - '|' и команды echo -e или printf.

$ echo -e "import sys\npath = sys.path\nfor line in path:\n   print(line)\n" | python3

 /usr/lib/python36.zip
 /usr/lib/python3.6
 /usr/lib/python3.6/lib-dynload
 /usr/local/lib/python3.6/dist-packages
 /usr/lib/python3/dist-packages

Первый элемент sys.argv будет '-c', текущий каталог будет добавлен в начало переменной окружения sys.path, что позволяет импортировать модули в этом каталоге как модули верхнего уровня.

Вызывает событие аудита cpython.run_command с аргументом command.

-m <module-name>:

Конструкция python3 -m <module-name> найдет модуль, если он расположен в местах поиска sys.path и выполните его содержимое, расположенное в __main__.

Поскольку аргумент является именем модуля, то не надо указывать расширение файла .py.

Когда вместо обычного модуля указывается имя пакета, интерпретатор будет выполнять <pkg>.__main__ как основной модуль. Это поведение намеренно похоже на обработку каталогов и zip-файлов, которые передаются интерпретатору в качестве аргумента сценария.

Заметка Эта опция не может быть использована со встроенными модулями и модулями расширения, написанными на языке C, так как они не имеют файлов модулей Python. Однако его все равно можно использовать для предварительно скомпилированных модулей, даже если исходный файл недоступен.

Первый элемент sys.argv будет '-m', текущий каталог будет добавлен в начало переменной окружения sys.path, что позволяет импортировать модули в этом каталоге как модули верхнего уровня.

Опция -I может использоваться для запуска скрипта в изолированном режиме, где не используется ни текущий каталог, ни переменная окружения sys.path, ни каталог пакетов пользователя. Все переменные окружения PYTHON* тоже игнорируются.

Многие стандартные библиотечные модули содержат код, который вызывается при их выполнении в виде скрипта. Примером является модуль timeit:

$ python3 -m timeit -s 'setup here' 'benchmarked code here'
$ python3 -m timeit -h # for details

Вызывает событие аудита cpython.run_module с аргументом module-name.

-i <script>:

Конструкция python3 -i <script> выполняет код в указанном скрипте script и переходит в режим чтение команд из стандартного ввода sys.stdin терминала.

Этот параметр может быть полезен для отладки кода в интерактивном режиме для проверки глобальных переменных или трассировки стека, когда скрипт вызывает исключение.

Например есть скрипт следующего содержания:

# test.py
import sys

def prn(a):
    print(a)
    
def each(n):
    for i in range(n):
        prn(i)

n = 2
each(n)
print('Первый элемент sys.argv:', sys.argv[0])

Запустим его с опцией -i, при этом скрипт выполнится а Python откроет интерактивный режим интерпретатора, что позволит дополнительно исследовать код:

$ python3 -i test.py
# 0
# 1
# Первый элемент sys.argv: prn.py
>>> n = 3
>>> each(n)
# 0
# 1
# 2
>>> prn('hello')
# hello

Если задана эта опция, то первый элемент sys.argv будет название скрипта script, текущий каталог будет добавлен в начало переменной окружения sys.path.

Вызывает событие аудита cpython.run_stdin без аргументов.