Выполняемые сценарии в Unix
Пользователям Unix и Linux: текстовые файлы с исходным программным кодом на языке Python можно сделать непосредственно исполняемыми, добавив в их начало особую строку, содержащую путь к интерпретатору Python, и присвоив файлу права на выполнение. Например, сохраните следующий фрагмент в текстовом файле с именем myscript:
#!/usr/bin/python print(‘And nice red uniforms’)
Первая строка будет восприниматься интерпретатором как комментарий (она начинается с #), но при запуске этого файла операционная система будет посылать строки этого файла интерпретатору, указанному после #! в первой строке. Если этот файл сделать непосредственно исполняемым с помощью команды chmod +x myscript, его можно будет запускать непосредственно, не вводя слово python в команде, как если бы это был двоичный файл исполняемой программы:
% myscript a b с And nice red uniforms
При запуске таким способом список sys.argv по-прежнему будет содержать имя сценария в первом элементе: [“myscript”, “a”, “b”, “с”] - в точности, как если бы сценарий был запущен с помощью более явного и переносимого формата команды python myscript a b с. Превращение сценариев в непосредственно исполняемые файлы на самом деле является трюком ОС Unix, а не особенностью Python, но стоит отметить, что можно сделать его несколько менее машинно-зависимым, указав в начале команду Unix env вместо пути к исполняемому файлу Python:
#!/usr/bin/env python print(‘Wait for it...’)
В этом случае операционная система будет отыскивать интерпретатор Python с помощью значений переменных окружения (обычно с помощью переменной PATH). Если один и тот же сценарий потребуется использовать на разных машинах, достаточно будет только изменить на них настройки окружения (а не редактировать исходный программный код сценария). Конечно, файлы Python по-прежнему можно запускать с помощью более явной командной строки:
% python myscript a b с
При этом предполагается, что интерпретатор python находится в системном пути поиска (иначе нужно указывать полный путь к нему), но этот прием действует на любой платформе, где установлен Python и имеется доступ к командной строке. Поскольку это более переносимый способ, я обычно использую его в примерах книги (за дополнительной информацией по этой теме я рекомендую обращаться к страницам руководства Unix). Но, несмотря на это, особые строки #! можно встретить во многих примерах данной книги - на случай, если читателям потребуется запускать их как исполняемые файлы в Unix или Linux; на других платформах они просто игнорируются как комментарии Python.
Обратите внимание, что в последних версиях Windows также можно вводить имя сценария непосредственно (без слова python), чтобы запустить его, и добавлять строку #! в начало сценария не нужно. При установке Python регистрируется в реестре Windows как программа для открытия файлов с расширениями, которые воспринимаются интерпретатором Python (.py и другие). Это также объясняет, почему сценарии могут запускаться в Windows простым щелчком мыши.
Переменные окружения оболочки
Переменные оболочки, которые иногда называют также переменными окружения, доступны в сценариях на языке Python через os.environ -объект Python, напоминающий словарь, в котором для каждой переменной оболочки отводится отдельная запись. Переменные оболочки находятся за пределами интерпретатора Python. Они часто устанавливаются в командной строке, в сценариях начального запуска системы или с помощью панели управления и обычно служат в качестве общесистемных параметров настройки для программ.
На самом деле вам уже должен быть знаком главный пример: путь поиска модулей PYTHONPATH является переменной оболочки, которую Python использует при выполнении операции импортирования модулей. После установки этой переменной в системе ее значение становится доступным для каждой запускаемой программы Python. Переменные оболочки могут также устанавливаться программами, чтобы передавать входные данные другим программам в приложении; поскольку обычно их значения наследуются порожденными программами, они могут служить простым средством связи между процессами.
Получение значений переменных оболочки
В Python окружение оболочки является простым предустановленным объектом, для обращения к которому не требуется использовать специальный синтаксис. Операция индексирования объекта os.environ строками с именами переменных оболочки (например, os.environ[‘USER’ ]) является эквивалентом знака доллара перед именем переменной в большинстве оболочек Unix (например, $USER), использования с двух сторон знака процента в DOS (%USER%) и вызова getenv(“USER”) в программе на языке С. Запустим интерактивный сеанс и поэкспериментируем (следующий сеанс выполнялся в Python 3.1 в Windows 7):