interpreter.md
1> **Источник:** https://python-all.ru/3.0/tutorial/interpreter.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Использование интерпретатора Python89## Запуск интерпретатора1011Интерпретатор Python обычно устанавливается в `/usr/local/bin/python3.0` на тех машинах, где он доступен; если добавить `/usr/local/bin` в путь поиска оболочки Unix, его можно запустить, набрав команду1213```python14python3.015```1617в командную строку оболочки. [\[1\]](https://python-all.ru/3.0/tutorial/interpreter.html#id3) Поскольку выбор каталога, в котором находится интерпретатор, является опцией установки, возможны и другие расположения; уточните у вашего местного гуру Python или системного администратора. (Например, `/usr/local/python` – популярная альтернатива.)1819На машинах с Windows установка Python обычно происходит в `C:\Python30`, хотя при запуске установщика это можно изменить. Чтобы добавить этот каталог в переменную PATH, введите следующую команду в командной строке DOS-окна:2021```python22set path=%path%;C:\python3023```2425Ввод символа конца файла (`Control-D` в Unix, `Control-Z` в Windows) в основном приглашении приводит к выходу из интерпретатора с нулевым кодом возврата. Если это не сработает, можно выйти из интерпретатора, набрав следующие команды: `import sys; sys.exit()`.2627Возможности редактирования командной строки интерпретатора обычно не очень сложны. В Unix тот, кто установил интерпретатор, возможно, включил поддержку библиотеки GNU readline, которая добавляет более развитые возможности интерактивного редактирования и истории. Возможно, самый быстрый способ проверить, поддерживается ли редактирование командной строки, – нажать Control-P на первом приглашении Python. Если раздастся звуковой сигнал, редактирование командной строки поддерживается; см. Приложение [*Интерактивное редактирование ввода и подстановка истории*](https://python-all.ru/3.0/tutorial/interactive.html#tut-interacting) для ознакомления с клавишами. Если ничего не происходит или если появляется `^P`, редактирование командной строки недоступно; единственное, что можно сделать, – использовать backspace для удаления символов из текущей строки.2829Интерпретатор работает примерно как оболочка Unix: при вызове со стандартным вводом, подключенным к tty-устройству, он читает и выполняет команды в интерактивном режиме; при вызове с аргументом – именем файла или с файлом в качестве стандартного ввода, он читает и выполняет *скрипт* из этого файла.3031Второй способ запуска интерпретатора – `python -c command [arg] ...`, который выполняет инструкцию(и) из *command*, аналогично опции [*-c*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-c) командной оболочки. Поскольку инструкции Python часто содержат пробелы и другие символы, значимые для оболочки, обычно рекомендуется заключать *command* целиком в одинарные кавычки.3233Некоторые модули Python также полезны как скрипты. Их можно запускать с помощью `python -m module [arg] ...`, что выполняет исходный файл для *module*, как если бы его полное имя было введено в командной строке.3435Обратите внимание на разницу между `python file` и `python <file`. Во втором случае запросы на ввод от программы, например вызов `sys.stdin.read()`, удовлетворяются из *file*. Поскольку этот файл уже был прочитан парсером до конца перед началом выполнения программы, программа сразу же обнаружит конец файла. В первом случае (который обычно и нужен) они удовлетворяются из того файла или устройства, которое подключено к стандартному вводу интерпретатора Python.3637При использовании файла сценария иногда бывает полезно запустить сценарий и затем перейти в интерактивный режим. Это можно сделать, передав [*-i*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-i) перед именем сценария. (Это не работает, если сценарий читается из стандартного ввода, по той же причине, что описана в предыдущем абзаце.)3839### Передача аргументов4041Когда интерпретатору известен скрипт, имя скрипта и последующие дополнительные аргументы передаются скрипту в переменной `sys.argv`, которая представляет собой список строк. Его длина не менее одного; если скрипт и аргументы не заданы, `sys.argv[0]` является пустой строкой. Когда имя скрипта задано как `'-'` (означает стандартный ввод), `sys.argv[0]` устанавливается в `'-'`. Когда используется [*-c*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-c) *command*, `sys.argv[0]` устанавливается в `'-c'`. Когда используется [*-m*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-m) *module*, `sys.argv[0]` устанавливается в полное имя найденного модуля. Опции, обнаруженные после [*-c*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-c) *command* или [*-m*](https://python-all.ru/3.0/using/cmdline.html#cmdoption-m) *module*, не обрабатываются интерпретатором Python, а остаются в `sys.argv` для обработки командой или модулем.4243### Интерактивный режим4445Когда команды читаются с tty, говорят, что интерпретатор находится в *интерактивном режиме*. В этом режиме он выводит приглашение для следующей команды с помощью *основного приглашения*, обычно три знака «больше» (`>>>`); для строк продолжения он выводит *вторичное приглашение*, по умолчанию три точки (`...`). Перед первым приглашением интерпретатор выводит приветственное сообщение с номером версии и уведомлением об авторских правах:4647```python48$ python3.049Python 3.0a1 (py3k, Sep 12 2007, 12:21:02)50[GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux251Type "help", "copyright", "credits" or "license" for more information.52>>>53```5455Строки продолжения требуются при вводе многострочных конструкций. В качестве примера рассмотрим инструкцию [`if`](https://python-all.ru/3.0/reference/compound_stmts.html#if):5657```python58>>> the_world_is_flat = 159>>> if the_world_is_flat:60... print("Be careful not to fall off!")61...62Be careful not to fall off!63```6465## Интерпретатор и его окружение6667### Обработка ошибок6869Когда возникает ошибка, интерпретатор выводит сообщение об ошибке и трассировку стека. В интерактивном режиме он затем возвращается к основному приглашению; если входные данные поступили из файла, он завершает работу с ненулевым кодом возврата после вывода трассировки стека. (Исключения, обрабатываемые предложением [`except`](https://python-all.ru/3.0/reference/compound_stmts.html#except) в операторе [`try`](https://python-all.ru/3.0/reference/compound_stmts.html#try), в данном контексте не считаются ошибками.) Некоторые ошибки являются безусловно фатальными и приводят к завершению с ненулевым кодом; это относится к внутренним противоречиям и некоторым случаям нехватки памяти. Все сообщения об ошибках записываются в стандартный поток ошибок; обычный вывод выполняемых команд направляется в стандартный вывод.7071Ввод символа прерывания (обычно Control-C или DEL) на основном или вторичном приглашении отменяет ввод и возвращает к основному приглашению. [\[2\]](https://python-all.ru/3.0/tutorial/interpreter.html#id4) Ввод прерывания во время выполнения команды вызывает исключение [`KeyboardInterrupt`](https://python-all.ru/3.0/library/exceptions.html#exceptions.KeyboardInterrupt), которое может быть обработано оператором [`try`](https://python-all.ru/3.0/reference/compound_stmts.html#try).7273### Исполняемые скрипты Python7475В Unix-системах BSD-подобного типа сценарии Python можно сделать непосредственно исполняемыми, как сценарии оболочки, поместив строку7677```python78#! /usr/bin/env python3.079```8081(при условии, что интерпретатор находится в **PATH** пользователя) в начале сценария и что файлу предоставлено право на выполнение. Последовательность `#!` должна быть первыми двумя символами файла. На некоторых платформах эта первая строка должна заканчиваться переводом строки в стиле Unix (`'\n'`), а не в стиле Windows (`'\r\n'`). Обратите внимание, что символ решётки `'#'` используется в Python для начала комментария.8283Сценарию можно задать исполняемый режим (права) с помощью команды **chmod**:8485```python86$ chmod +x myscript.py87```8889В системах Windows нет понятия «исполняемый режим». Установщик Python автоматически связывает файлы `.py` с `python.exe`, так что двойной щелчок по файлу Python запускает его как скрипт. Расширение также может быть `.pyw`; в этом случае окно консоли, которое обычно появляется, подавляется.9091### Кодировка исходного кода9293По умолчанию исходные файлы Python считаются закодированными в UTF-8. В этой кодировке символы большинства языков мира можно одновременно использовать в строковых литералах, идентификаторах и комментариях – хотя стандартная библиотека использует только символы ASCII для идентификаторов, это соглашение, которому должен следовать любой переносимый код. Чтобы правильно отображать все эти символы, редактор должен распознавать, что файл в UTF-8, и использовать шрифт, поддерживающий все символы файла.9495Также можно указать другую кодировку для исходных файлов. Для того чтобы это сделать, поместите ещё одну специальную строку-комментарий сразу после строки `#!` для определения кодировки исходного файла:9697```python98# -*- coding: encoding -*-99```100101После такого объявления всё содержимое исходного файла будет считаться имеющим кодировку *encoding* вместо UTF-8. Список возможных кодировок можно найти в справочнике по библиотеке Python, в разделе [`codecs`](https://python-all.ru/3.0/library/codecs.html#module-codecs).102103Например, если редактор не поддерживает файлы в кодировке UTF-8 и требует использования другой кодировки, например Windows-1252, можно написать:104105```python106# -*- coding: cp-1252 -*-107```108109и при этом использовать все символы набора Windows-1252 в исходных файлах. Специальный комментарий о кодировке должен находиться в *первой или второй* строке файла.110111### Файл интерактивного запуска112113При интерактивной работе с Python часто бывает удобно, чтобы некоторые стандартные команды выполнялись при каждом запуске интерпретатора. Для этого можно установить переменную окружения с именем [**PYTHONSTARTUP**](https://python-all.ru/3.0/using/cmdline.html#envvar-PYTHONSTARTUP), указав имя файла, содержащего команды запуска. Это похоже на механизм `.profile` в оболочках Unix.114115Этот файл читается только в интерактивных сеансах, а не когда Python читает команды из скрипта, и не когда `/dev/tty` задан в качестве явного источника команд (в остальном это ведёт себя как интерактивный сеанс). Он выполняется в том же пространстве имён, что и интерактивные команды, поэтому объекты, которые он определяет или импортирует, можно использовать без уточнения в интерактивном сеансе. Вы также можете изменить приглашения `sys.ps1` и `sys.ps2` в этом файле.116117Если вы хотите загружать дополнительный файл запуска из текущего каталога, вы можете запрограммировать это в глобальном файле запуска с помощью кода вроде `if os.path.isfile('.pythonrc.py'): exec(open('.pythonrc.py').read())`. Если вы хотите использовать файл запуска в скрипте, это нужно сделать явно в самом скрипте:118119```python120import os121filename = os.environ.get('PYTHONSTARTUP')122if filename and os.path.isfile(filename):123 exec(open(filename).read())124```125126Сноски127128| [\[1\]](https://python-all.ru/3.0/tutorial/interpreter.html#id1) | В Unix интерпретатор версии 3.0 по умолчанию не устанавливается с исполняемым файлом с именем `python`, чтобы не возникало конфликтов с одновременно установленным исполняемым файлом Python 2.x. |129| --- | --- |130131| [\[2\]](https://python-all.ru/3.0/tutorial/interpreter.html#id2) | Проблема с пакетом GNU Readline может помешать этому. |132| --- | --- |133