Аппендикс

Интерактивный Режим

Обработка ошибок

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

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

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

На системах BSD Unix, Python-скрипты могут быть созданы непосредственно исполняемыми, поместив строку

#!/usr/bin/env python3.5

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

Скрипт может быть сделан исполняемым, используя команду chmod.

$ chmod +x myscript.py

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

Стартовый файл интерактивного режима

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

Такой файл читается только в инетактивных сессиях, не когда Python читает команды из скрипта, и не когда /dev/tty дан в качестве явного источника команд (в противном случае Python ведет себя подобно интерактивной сессии). Этот файл выполняется в том же пространстве имен, где выполняются интерактивные команды, так что объекты, которые он определяет или импортирует могут быть использованы без ограничений в интерактивном режиме. Вы также можете изменить приглашения 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)

Модули кастомизации

Python предоставляет два хука для кастомизации: sitecustomize и usercustomize. Чтобы увидеть, как это работает, вам необходимо вначале найти местоположение вашей пользовательской директории site-packages. Запустите Python и запустите такой код:

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

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

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

Сноски

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