Виклик інтерпретатора
Якщо інтерпретатор мови Пітон встановлено, його місцезнаходженням зазвичай є /usr/local/bin/python
. Якщо додати /usr/local/bin
до пошукової стежки оболонки Юнікса, то це надасть змогу викликати інтерпретатор за допомогою команди
python
Місце, де живе інтерпретатор, може бути задане під час інсталяції. Якщо ви не певні, де знаходиться Пітон, то виконайте команду: which python або запитайте місцевого ґуру чи системного адміністратора (/usr/local/python
, напр., є популярною альтернативою).
Ввід символу "кінець файла" (Control-D
на Unix, Control-Z
на Windows) змусить інтерпретатор вийти зі статусом нуль. Якщо це не працює, залишити інтерпретатор можна за допомогою таких команд: "import sys; sys.exit()
".
Редагування рядка в інтерпретаторі загалом не дуже складне. На Юніксі той, хто встановив інтерпретатор, міг також додати підтримку бібліотеки GNU для зчитування рядка (GNU readline library), котра надає ширші можливості інтерактивного редагування та пам'ятає історію команд. Чи не найшвидший спосіб перевірити, чи можливе редагування рядка - це введення Control-P
відразу після запуску інтерпретатора. Якщо ви чуєте гудок, то редагування рядка діє; див. Додаток A для докладнішої інформації. Якщо ж нічого не відбулося або "P" виведено на консоль, то ця риса недоступна; ви зможете видаляти попередні символи лише один за одним.
Інтерпретатор діє подібно до оболонки Юнікса: якщо його викликано із стандартним виводом під'єднаним до терміналу, команди зчитуються і виконуються у діалоговому режимі, якщо ж його викликано з аргументом, що є назвою файла, або ж файл задано як стандартний ввід, інтерпретатор зчитує і виконує скрипт з цього файла.
Інший спосіб запуску інтерпретатора - це "python -c _команда_ [аргумент] ...
", що виконує дії, задані командою, подібно до того, як діє опція оболонки -c
. Тому що твердження Пітона часто містять пробіли та інші спеціальні (з перспективи оболонки) символи, найкраще взяти команду в подвійні лапки.
Слід зауважити, що існує різниця між "python файл
" і "python < файл
". В останьому випадку виклики таких функцій як input()
і raw_input()
, спробують зчитати ввід з файла. Оскільки парсер уже повністю зчитав файл ще до того, як почалося виконання програми, то сама програма відразу ж отримає кінець файла. У попередньому ж випадку (і це у більшості випадків саме те, що потрібно), ці функції отримають ввід з того файла чи пристрою, що під'єднаний до стандартного вводу інтерпретатора.
Коли використовується файл зі скриптом, інколи буває потрібно розпочати діалоговий режим по закінченні програми. Це можна зробити за допомогою опції -i перед скриптом. (З наведених вище причин цей метод не діє, коли скрипт зчитано зі стандартного вводу).
Передача аргументів
Якщо назва скрипту і додаткові аргументи відомі інтерпретатору, то вони можуть бути отримані всередині скрипту із системної змінної sys.argv
, котра являє собою список ланцюжків. Довжина списку - принаймні один; якщо ж ні скрипту, ані аргументів не подано, sys.argv[0]
є пустим ланцюжком. Якщо назва скрипту задана як '-'(що означає стандартний ввід), то відповідно і sys.argv[0]
має величину '-
'. Якщо використано -c
команда, то sys.argv[0]
отримує '-c
'. Якщо використано -m модуль
, sys.argv[0]
отримує повну назву заданого модуля. Опції, задані після -c команда
або -m модуль
не споживаються інтерпретатором, а лишаються у sys.argv
для опрацювання командою чи модулем.
Діалоговий режим
Коли команди зчитуються з терміналу, інтерпретатор працює у так званому діалоговому режимі. У цьому режимі кожен рядок починається головним запрошенням до вводу, здебільшого три знаки "більше ніж" ("›››
"); для продовження вводу рядок починається вторинним запрошенням до вводу, типово три крапки ("...
"). Інтерпретатор виводить коротеньке вітання, що складається з номера версії та авторських прав:
python
Python 1.5.2b2 (#1, Feb 28 1999, 00:02:06) [GCC 2.8.1] on sunos5
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
›››
Продовження рядка потрібно при вводі багаторядкової конструкції. Розгляньмо як приклад конструкцію з if
:
››› the_world_is_flat = 1
››› if the_world_is_flat:
... print "Дивись не впади!"
...
Дивись не впади!
Інтерпретатор і його середовище
Обробка помилок
Якщо трапилась помилка, інтерпретатор видає повідомлення про помилку разом з інформацією про стек. В діалоговому режимі він повертається до головного запрошення до вводу. Якщо дані було отримано з файла, інтерпретатор вийде з ненульовим статусом після того, як виведе ітформацію про стек. (Винятки, що контролюються виразом except
у твердженні try
у цьому контексті не вважаються помилками). Окремі помилки є безумовно фатальними і тому зумовлюють вихід програми з ненульвим статусом. Це стосується внутрішніх непослідовностей та, в окремих випадках, ситуацій, коли інтерпретатору не вистачає пам'яті. Усі повідомлення про помилки виводяться на стандартний вивід помилок. Нормальний вивід з команд, що виконуються, подається на стандартний вивід.
Якщо ввести символ переривання (зазвичай Control-C
чи DEL
) у відповідь на головне чи вторинне запрошення до вводу, весь ввід буде проігноровано й інтерпретатор повернеться до голового запрошення до вводу. (Цього може не статися через певну проблему із пакунком GNU Readline). Якщо ввести символ переривання під час виконання якоїсь команди, то утвориться виняток "переривання клавіатурою" (KeyboardInterrupt
), який можна впіймати за допомогою твердження try.
Виконання скриптів на мові Python
На подібних до BSD системах Юнікс скрипти, написані на Пітоні, можуть виконуватися безпосередньо, подібно до скриптів оболонки, якщо додати рядок
#! /usr/bin/env python
(припускається, що інтерпретатор є у шляху користувача) на початку скрипту і задати виконуваний статус для файла. "#!
" повинні бути першими двома символами файла. На окремих системах цей перший рядок повинен закінчитися юніксовим символом кінця рядка ("\n
"), а не макінтошевим ("\r
") чи віндовсним ("\r\n
"). Зауважте, що символ "#
" у мові Пітон означає початок коментаря.
Файлу можна надати виконуваного статусу за допомогою команди chmod
:
$ chmod +x myscript.py
Кодування джерела
Файл, що містить програму, написану на Пітоні, може бути створений на основі відмінного від кодування ASCII. Найкращий спосіб вказати кодування - це додати спеціальний коментар відразу після рядка з "#!
":
# -*- coding: кодування -*-
Завдяки цій декларації усі символи джерела будуть інтерпретовані як закодовані у вказаному кодуванні. Також це уможливлює створення буквальних величин в Юнікоді за допомогою зазначеного кодування. Список можливих кодувань можна знайти у Python Library Reference, під розділом codecs
.
Якщо ваш текстовий редактор дозволяє зберігати файли у кодуванні UTF-8 з притаманною йому позначкою порядку байтів (byte order mark або BOM), то ви можете використовувати її замість декларації. Інтегроване середовище для розробки програм на Пітоні (IDLE) має цю властивість, якщо задано Options/General/Default Source Encoding/UTF-8. (Опції/Загальне/Стандартне кодування джерела/UTF-8) Слід зауважити, що старіші версії Пітона (2.2 і раніші) не розуміють цієї позначки, не розуміє її й операційна система у файлах з "#!
".
Кодування UTF-8 (задане через підпис чи декларацію) дозволяє використовувати переважну більшість мов світу одночасно як у коментарях, так і для задання буквальних текстових величин. Використання символів, що не належать до ASCII, у ідентифікаторах не дозволяється. Щоб відобразити ці символи належним чином ваш редактор повинен розпізнати, що файл закодовано у UTF-8, та використовувати шрифт, здатний відобразити всі символи файла.
Стартові файли для діалогового режиму
Коли ви використовуєте Пітон у діалоговому режимі, часто потрібно виконувати певні стандартні команди кожного разу, коли включено інтерпретатор. Цього можна досягти шляхом задання змінної середовища PYTHONSTARTUP
, яка вказує на файл з потрібними стартовими командами. Це подібно до використання файла .profile
в оболонках Юнікса.
Цей файл зчитується лише в діалоговому сеансі, а не тоді, коли Пітон зчитує команди зі скрипту, чи коли /dev/tty
явно задано як джерело усіх команд (в усьому іншому цей сеанс подібний до діалогового). Цей файл виконується у тому ж іменному просторі, де і всі інші діалогові команди. Таким чином, об'єкти, імпортовані та визначенні у ньому, можуть використовуватися безпосередньо під час діалогового сеансу. У цьому файлі також можливо змінити символи вводу sys.ps1 та sys.ps2.
Якщо потрібно зчитати додаткові стартові файли з поточного каталогу, то цього можна досягти за допомогою коду на зразок "if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')
". Якщо стартовий файл потрібно використати у скрипті, то ця дія повинна бути явно вказана:
import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
execfile(filename)