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