Интерфейс интерпретатора похож на интерфейс оболочки UNIX, но предоставляет несколько дополнительных методов вызова:
-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
без аргументов.