16. Приложение
**************


16.1. Интерактивный режим
=========================


16.1.1. Обработка ошибок
------------------------

Когда возникает ошибка, интерпретатор выводит сообщение об ошибке и
трассировку стека. В интерактивном режиме он затем возвращается к
основному приглашению. Если ввод осуществляется из файла,
интерпретатор завершает работу с ненулевым кодом возврата после вывода
трассировки стека. (Исключения, обрабатываемые блоком "except" в
инструкции "try", не являются ошибками в этом контексте.) Некоторые
ошибки являются фатальными и приводят к завершению работы с ненулевым
кодом возврата. Это относится к внутренним несоответствиям и некоторым
случаям исчерпания памяти. Все сообщения об ошибках выводятся в
стандартный поток ошибок, а нормальный вывод команд — в стандартный
поток вывода.

Ввод символа прерывания (обычно "Control"-"C" или "Delete") в основном
или вторичном приглашении отменяет ввод и возвращает к основному
приглашению. [1] Ввод прерывания во время выполнения команды вызывает
исключение "KeyboardInterrupt", которое может быть обработано
инструкцией "try".


16.1.2. Исполняемые Python скрипты
----------------------------------

В BSD-подобных Unix системах скрипты Python можно сделать
исполняемыми, как скрипты командной оболочки, добавив строку

   #!/usr/bin/env python3

(предполагается, что интерпретатор находится в "PATH") в начало
скрипта и дав файлу права на выполнение. Символы "#!" должны быть
первыми двумя в файле. На некоторых платформах первая строка должна
заканчиваться символом новой строки в стиле Unix ("'\n'"), а не в
стиле Windows ("'\r\n'"). Обратите внимание, что символ хэша или
решетки, "'#'", используется для начала комментария в Python.

Скрипту можно назначить права на исполнение или режим исполнения с
помощью команды **chmod**.

   $ chmod +x myscript.py

В системах Windows нет понятия "режима исполнения". Установщик Python
автоматически ассоциирует файлы с расширением ".py" с "python.exe",
так что двойной щелчок по файлу Python запустит его как скрипт.
Расширение также может быть ".pyw", в этом случае окно консоли,
которое обычно появляется, будет скрыто.


16.1.3. Файл интерактивного запуска
-----------------------------------

При работе с Python в интерактивном режиме часто бывает удобно, чтобы
некоторые стандартные команды выполнялись при каждом запуске
интерпретатора. Для этого можно задать переменную окружения
"PYTHONSTARTUP", указав в ней путь к файлу с вашими стартовыми
командами. Это похоже на использование ".profile" в оболочках Unix.

Этот файл исполняется только в интерактивных сессиях, а не при
исполнении других файлов или при использовании "/dev/tty" в качестве
источника команд (который в других случаях работает как интерактивная
сессия). Файл исполняется в том же пространстве имён, что и
интерактивные команды, таким образом любые объекты, определённые или
импортированные в нём, доступны напрямую в интерактивной сессии. Вы
также можете поменять вид основного "sys.ps1" и вторичного "sys.ps2"
приглашений в этом файле.

Если вы хотите прочитать дополнительный стартовый файл из текущей
директории, это можно запрограммировать в глобальном стартовом файле с
помощью кода "if os.path.isfile('.pythonrc.py'):
exec(open('.pythonrc.py').read())". Если вы хотите использовать
стартовый файл напрямую в вашей программе, то вы можете сделать это
явно таким образом:

   import os
   filename = os.environ.get('PYTHONSTARTUP')
   if filename and os.path.isfile(filename):
       with open(filename) as fobj:
           startup_file = fobj.read()
       exec(startup_file)


16.1.4. Модули настройки
------------------------

Python предоставляет два механизма, позволяющих настроить его:
sitecustomize`и :index:`usercustomize. Чтобы увидеть, как это
работает, сначала нужно узнать расположение пользовательского каталога
site-package. Запустите Python и выполните код:

   >>> import site
   >>> site.getusersitepackages()
   '/home/user/.local/lib/python3.x/site-packages'

Теперь вы можете создать в этом каталоге файл "usercustomize.py" и
добавить в него любой желаемый код. Он будет выполняться при каждом
запуске Python, если только интерпретатор не запущен с опцией "-s" для
отключения автоматического импорта.

Аналогично работает и sitecustomize, хотя обычно создаётся
администратором компьютера в глобальном каталоге site-packages и
импортируется перед usercustomize. Дополнительную информацию смотрите
в документации модуля "site".

-[ Примечания ]-

[1] Проблема с пакетом GNU Readline может этому воспрепятствовать.
