InfoCity
InfoCity - виртуальный город компьютерной документации
Реклама на сайте







Размещение сквозной ссылки

 

Глава 2. Использование интерпретатора Python



2.1 Запуск интерпретатора


Интерпретатор Python обычно инсталлирован как /usr/local/bin/python на тех машинах, где это доступно; включение /usr/local/bin в список путей поиска shell Вашего UNIX, делает возможным его запуск путем подачи shell команды

python

Поскольку выбор каталога, где будет находиться интерпретатор, является опцией инсталляции, то возможно размещение и в другом месте; проверьте с Вашим местным Python-гуру или системным администратором. (Например, /usr/local/python - популярное альтернативное место размещения.)

Интерпретатор действует подобно shell UNIX: в случае его вызова со стандартным вводом, соединенным с устройством tty, он считывает и выполняет команды интерактивно; в случае же его вызова с передачей аргумента - имени файла, или с файлом в качестве стандартного ввода, он читает и исполняет скрипт, записанный в этом файле.

Третьим способом запуска интерпретатора является "python -c command [arg] ...", что приводит к выполнению команд command , аналогично использованию опции -c shell-ом. Поскольку выражения Python часто содержат пробелы и другие символы, зарезервированные для shell, то будет лучше если command полностью заключить в двойные кавычки.

Существует разница между "python file" и "python < file". В последнем случае запросы программы на ввод, такие как вызовы функций input() и raw_input() удовлетворяются из файла file. Поскольку этот файл уже был прочитан до конца перед тем, как программа начала выполняться, то программа немедленно встретит EOF 3 . В первом же случае (который Вам обычно и будет нужен), ввод осуществляется из файла или устройства, с которым соединен стандартный ввод интерпретатора Python.

Когда выполняется файл скрипта, иногда полезна возможность перехода в интерактивный режим после завершения работы скрипта. Это можно сделать передав параметр -i перед именем скрипта. (Такой способ не сработает если скрипт читается из стандартного ввода, по той же причине, которая описана в предыдущем абзаце.)

2.1.1 Передача аргументов


Имя скрипта и дополнительные аргументы передаются скрипту в переменной sys.argv , которая является списком (list) строк (string). Его длина по меньшей мере равна единице; в случае, когда интерпретатор не получил никакого скрипта и дополнительных аргументов, sys.argv[0] является пустой строкой. Когда имя скрипта передано как ‘-’ (означающее стандартный ввод), sys.argv[0] устанавливается в ‘-’. После использования -c command, sys.argv[0] равняется ‘-c’. Опции, находящиеся после -c command , не обрабатываются интерпретатором Python, а передаются в sys.argv для обработки командами.


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


Когда команды читаются из tty, говорят, что интерпретатор находится в интерактивном режиме. В этом режиме приглашение ввода следующей команды выводится в виде первичного приглашения, обычно, три знака "больше" (>>>); для продолжения ввода строк выдается вторичное приглашение, по умолчанию - три точки (...). Ввод символа EOF (Control-D на UNIX, Control-Z на DOS и Windows) в ответ на первичное приглашение, приводит к выходу из интерпретатора с нулевым статусом выхода.

Интерпретатор печатает приветствующее сообщение, констатируя его номер версии и замечание об авторском праве, перед выдачей первого приглашения:

python
Python 1.4 (Oct 25 1996) [GCC 2.7.2]
Copyright 1991-1996 Stichting Mathematisch Centrum, Amsterdam
>>>

2.2 Интерпретатор и его окружение



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


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

Ввод прерывающего символа (обычно Control-D или DEL) в ответ на первичное или вторичное приглашение прекращает ввод и приводит снова к выдаче первичного приглашения 5 . Нажатие прерывающей комбинации клавиш в то время, когда выполняется команда, вызывает исключение KeyboardInterrupt, которое может быть обработано с помощью оператора try.


2.2.2 Путь поиска модулей


Когда импортируется модуль, например, с именем spam, интерпретатор ищет файл spam.py в текущем каталоге, а потом в списке директорий, указанных в переменной окружения PYTHONPATH. Эта переменная имеет такой же синтаксис, как и PATH - переменная shell UNIX-а, т.е. список имен каталогов, разделенных двоеточиями. Когда PYTHONPATH не задан, или когда файл там не найден, поиск продолжается в пути по умолчанию, зависящей от места инсталляции, обычно .:/usr/local/lib/python .

Фактически, модули ищутся в списке каталогов, заданном в переменной sys.path, которая инициализируется директорией, содержащей выполняемый скрипт (или текущей директорией), затем PYTHONPATH и инсталлированной директорией по умолчанию. Это позволяет Python-программам, которые знают, что они делают, модифицировать или заменять путь поиска модулей. Смотрите секцию "Стандартные модули" ниже.


2.2.3 "Компилированные" Python-файлы


Поскольку важно ускорить выполнение коротких программ, которые используют большое количество стандартных модулей, то если существует файл spam.pyc в том же каталоге, что и spam.py , то предполагается, что он содержит уже "компилированную" версию модуля spam . Время модификации версии spam.py , использованной для создания spam.pyc , записывается в spam.pyc , и, в последствии, при несовпадении времени последнего изменения spam.py и времени, записанного в spam.pyc , этот файл spam.pyc будет проигнорирован.

Обычно, Вам не потребуется ничего делать для создания файла spam.pyc . Всякий раз после удачной компиляции spam.py , предпринимается попытка записи компилированной версии - spam.pyc . Если попытка окажется неудачной, это не вызовет ошибки; если по какой-либо причине файл будет записан не полностью, то полученный файл spam.pyc позднее распознается как некорректный и будет проигнорирован. Содержимое файла spam.pyc является платформо-независимым, поэтому каталог модулей Python может быть поделен между машинами разных архитектур. (Замечание для экспертов: модуль compileall создает .pyc файлы для всех модулей.)


2.2.4 Выполнимые (executable) Python-скрипты


На BSD-шных UNIX системах скрипты Python можно сделать прямо выполняемыми, подобно скриптам shell, путем добавления строки

#!/usr/local/bin/python

(предполагая, что это корректный путь расположения интерпретатора) в самом начале скрипта и установив для файла выполнимый (executable) режим. "#!" должны быть первыми двумя символами в файле.


2.2.5 Интерактивно запускаемые файлы


Когда Вы используете интерпретатор Python интерактивно, часто удобно, чтобы некоторые стандартные команды выполнялись при каждом запуске интерпретатора. Это похоже на .profile для shell-ов UNIX.

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

Если Вы хотите выполнения еще одного "подготовительного" файла, то это может быть запрограммировано в первичном "подготовительном" файле, например, execfile(‘.pythonrc’) . В случае необходимости запуска "подготовительного" файла из скрипта, следует явно указать это в скрипте: import os; execfile(os.environ[‘PYTHONSTARTUP’]) .


2.3 Редактирование интерактивного ввода и истории команд


Некоторые версии Python поддерживают редактирование текущей вводимой строки и истории команд, подобно тому, как это делается в Korn shell и GNU Bash shell. Эта возможность реализована с использованием библиотеки GNU Readline, которая предоставляет Emacs-стиль и vi-стиль редактирования. Данная библиотека имеет свою собственную документацию, которую я не буду здесь дублировать; однако, основы легко объяснимы.

Возможно наиболее быстрым способом проверки того, поддерживается ли редактирование командной строки, является нажатие Control-P в ответ на первое приглашение Python, которое Вы получите. Если прозвучит звуковой сигнал, то редактирование поддерживается. Если же ничего не произойдет, или на экране появится "^P", то Вы можете смело пропустить остаток этой секции.


2.3.1 Редактирование строки


Если это вообще поддерживается, то редактирование строки ввода всегда активно после выдачи интерпретатором первичного или вторичного приглашения. Текущая строка может быть отредактирована с использованием обычных управляющих символов Emacs. Вот самые важные из них: C-A (Control-A) перемещает курсор на начало строки, C-E - конец, C-B - передвигает на одну позицию влево, C-F - вправо. Backspace удаляет символ слева от курсора, C-D - символ справа. C-K - стирает конец строки справа от курсора, C-Y - возвращает обратно последнюю стертую строку. C-подчеркивание - отменяет последнее действие, это можно повторить несколько раз, для получения суммарного эффекта.


2.3.2 История команд


Все непустые введенные строки запоминаются в специальном буфере, и, когда выдается новое приглашение, текущая позиция находится в новой строке в конце буфера. C-P возвращает на одну строку в буфере назад, C-N - на строку вперед. Любая строка может быть отредактирована; для пометки строки как модифицированной, в начале приглашения появляется звездочка. Нажатие клавиши Return передает текущую строку интерпретатору. C-R включает поиск назад; C-S - поиск вперед.


2.3.3 Привязка клавиш


Привязка клавиш и некоторые другие параметры библиотеки Readline могут быть установлены путем помещения необходимых команд в инициализирующий файл под названием $home/.inputrc . Команды привязки клавиш имеют следующую форму

имя_ключа:имя_функции

или

"строка":имя_функции

а установка опций:

set имя_опции значение

Например:

#Я предпочитаю vi-стиль редактирования:
set editing-mode vi
#Редактирование с использованием простой строки:
set horizontal-scroll-mode On
#Переназначить некоторые клавиши:
Meta-h: backward-kill-word
"\C-u": universal-argument
"\C-x\C-r": re-read-unit-file

Примечание: привязкой по умолчанию для клавиши TAB в Python является вставка символа табуляции вместо функции завершения имени файла, заданной в Readline по умолчанию. Но если Вы настаиваете, то можно это изменить добавив

TAB: complete

в Ваш $home/.inputrc . (Однако это затруднит ввод последующих строк с красной строки...)


2.3.4 Комментарий


Все эти приспособления - громадный шаг вперед по сравнению с предыдущими версиями интерпретатора; однако, некоторые пожелания не были учтены: было бы хорошо, если абзацный отступ предлагался бы автоматически когда это необходимо (разборщик может определить когда требуется записывать следующий символ с отступом). Также были бы полезны команды для проверки (или даже автоматического предложения) закрывающих скобок, кавычек, т.д.

[Назад][Содержание][Вперед]


Реклама на InfoCity

Яндекс цитирования



Финансы: форекс для тебя








1999-2009 © InfoCity.kiev.ua