Subsections


2. A Python értelmező használata


2.1 Az értelmező elindítása

The Python interpreter is usually installed as /usr/local/bin/python on those machines where it is available; putting /usr/local/bin in your Unix shell's search path makes it possible to start it by typing the command

A Python értlemező szokásos helye a /usr/local/bin/python könyvtár, ahol ilyen létezik; helyezd el a /usr/local/bin útvonalat a Unix shell keresési útvonalán, és ekkor a

python

utasítás beírásával az értelmező elindítható.

Mivel a telepítés helye telepítési opció, más helyen is lehet a program; ha nem tudod az értelmezőt elindítani, kérj segítséget egy nagyobb tudású embertől. (Például a /usr/local/python is egy gyakori hely.)

Fájlvége karaktert (Control-D Unix-on, Control-Z Windows-on) írva a Python elsődleges promptjára, az értelmező nulla kilépési státusszal (zero exit status) lép ki. Ha ez nem működik, akkor az értelmezőt a következő utasításokkal hagyhatod el: "import sys; sys.exit()".

A szövegsori szerkesztés támogatottságának talán leggyorsabb ellenőrzése a Control-P megnyomása az első megjelenő promptnál. Ha ez sípol, akkor van; lásd az Appendix bemutatja az érvényes billentyűket. Ha semmi nem jelenik meg, vagy csak egy P, akkor a szövegsori szerkesztés nem elérhető; ekkor csak a backspace karakterrel törölhetsz karaktert az aktuális sorból.

Az értelmező a UNIX shellhez hasonlóan működik: ha a szabváyos bemenettel van meghívva, akkor interaktívan olvas és hajt végre utasításokat; ha fájlnév argumentummal vagy egy fájllal, mint szabványos bemenettel hívjuk meg, akkor szkript-ként lefuttatja a megadott fájlt.

Egy másik lehetőség az értelmező indítására a "python -c command [arg] ..." parancsor, amely végrehajtja az utasítás(oka)t a command-ban, hasonlóan a shell -c opciójához. Mivel a Python utasítások gyakran tartalmaznak szóközöket, vagy más speciális karaktereket, amelyeknek speciális jelentésük van a shell számára, jobb, ha a parancs részt idézőjelbe (double quote) tesszük.

Some Python modules are also useful as scripts. These can be invoked using "python -m module [arg] ...", which executes the source file for module as if you had spelled out its full name on the command line.

Némelyik Python modul önálló programként is használható, ha így hívod meg: "python -m module [arg] ..." - ez az utasítás végrehajtja a module forráskódját.

Érdemes megjegyezni, hogy különbség van a "python file" és a "python <file" között. A második esetben a program beviteli kéréseit (amilyenek a input() és raw_input() hívások) a program a fájlból veszi. Mivel a fájlt az elemző (parser) a fájl végéig beolvassa a program indulása előtt, a program azonnal fájl-vége karakterrel fog találkozni. Az első esetben (amely gyakran a kívánt működés) a program azokat a fájlokat vagy eszközöket (device) használja, amelyek a Python értlemezőhöz csatlakoznak.

Sokszor hasznos, ha egy szkript fájl futtatása után rögtön interaktív üzemmódba kerülünk. Ezt egyszerű elérni, a szkript neve előtt adjuk meg az -i kapcsolót. (Ez nem működik ha a szkriptet a szabványos bemeneten keresztül olvassuk be, a fentebb leírtak szerint.)


2.1.1 Argumentum átadás

Ha az értelmezőt szkrip-fájllal indítjuk, akkor a szkript fájl neve és a nevet esetleg követő argumentumok a sys.argv, string-lista típusú változóba kerülnek. Ennek hossza leglább 1; amennyiben sem szkrip-nevet, sem semmilyen argumentumot nem adunk meg, a sys.argv[0] változó értéke üres string lesz. Ha a szkript neveként '-'-t adunk meg (ez a szabványos bemenetnek felel meg), sys.argv[0] értéke '-' lesz. Argumentumként -c parancs-ot megadva sys.argv[0] értéke '-c' lesz. A -c parancs után álló kapcsolókat az értelmező nem dolgozza fel, hanem a sys.argv-ben eltárolva a parancs-ra hagyja annak feldolgozását.


2.1.2 Interaktív (párbeszédes) mód

Amikor a parancs a tty-ről (pl. billentyűzet) érkezik, az értelmező úgynevezett interaktív (párbeszédes) üzemmódban működik. Ekkor az elsődleges prompt megjelenítésével kéri a következő parancs megadását, amely szokásosan három egymás után következő nagyobb-jel (">>"); a sorok folytatásához ezek a folytatólagos sorok - a másodlagos promptot jeleníti meg, szokásos értéke három egymás után írt pont ("... "). Azt értelmező elindulásakor, mielőtt az elsődleges prompt megjelenne, egy üdvözlő-szöveget ír ki, tartalmazva az értelmező verziószámát és a jogi védettséget

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
>>>

Folytatólagos sorok szükségesek, ha többsoros szerkezeteket írsz be. Például a következő if utasítás esetén:

>>> a_vilag_sik = 1
>>> if a_vilag_sik:
...     print "Vigyázz, nehogy leess!"
... 
Vigyázz, nehogy leess!


2.2 Az értelmező és környezete


2.2.1 Hibakezelés

Hiba esetén az értelmező hibaüzenetet küld és kiírja a hiba nyomvonalát (stack trace). Párbeszédes üzemmódban az elsődleges promt jelenik meg; ha az adatok beolvasása fájlból történt, kiírja a hibanyomvonalat és nullától eltérő kilépési értékkel tér vissza. (A programon belül fellépő és a program által kezelt kivételek (except - try ) nem jelentenek hibát ebben a környezetben.) Vannak feltétel nélküli, ú.n. fatális hibák, amelyek azonnal, nullától eltérő visszatérési értékkel történő programmegszakítást és kilépést eredményeznek, ilyenek a belső inkonzisztenciát okozó, valamint a memóriából kifutó programok hibái. Minden hibaüzenet a szabványos hibakimenetre (standard error) kerül, a futtatott parancsok rendes kimenete pedig a szabványos kimenetre (standard output) íródik.

Ha az elsődleges, vagy a másodlagos promptnál a megszakítás-karaktert gépeljük be (rendszerint Control-C vagy a DEL billentyű), az törli az eddigi bemenetet és visszaadja a vezérlést az elsődleges promtnak. 2.1

Ha a megszakításkérelmet valamely parancs/program végrehajtása alatt adjuk ki, az KeyboardInterrupt kivételt generál; ez programból a try utasítással 'kapható el'.


2.2.2 Végrehajtható Python szkriptek

A BSD-szerű Unix rendszereken (Linuxon is) a Python szkripteket ugyanúgy, mint a shell szkripteket - közvetlenül futtathatóvá lehet tenni, legelső sorként megadva a

#! /usr/bin/env python

(feltételezve, hogy a Python értelmező elérési útvonala a felhasználó PATH változójában be van állítva és a szkript fájl végrehajtható tulajdonsággal bír).

Ford. megjegyzés: Debian rendszeren a Python elérési útvonalát adtam meg a programjaim elején, ez nálam

#!/usr/bin/python

volt - így nem volt szükség környezeti változó beállítására.

A fenti esetekben a fájlnak a "#!" karakterekkel kell kezdődnie. Ezt a sort néhány platformon Unix-típusú sorvéggel ("\n") kell lezárni, nem pedig Mac OS ("\r") vagy windows-os ("\r\n") sorvéggel.

Figyelem: ha láthatatlan "\r" karaktert tartalmaz az első sor vége, nem fog lefutni a program, és a hibát nagyon nehezen lehet észrevenni! Tipikusan akkor fordul elő, ha Windows-os szövegszerkesztővel (pl. notepad) készítjük a programot.

Megjegyezendő: a "#" karakterrel a Pythonban a megjegyzéseket kezdjük.

A szkriptnek a chmod paranccsal adhatunk végrehajtási engedélyt az alábbi módon:

$ chmod +x szkriptem.py

2.2.3 A forráskód karakterkészlete

A Python-os forrásfájlokban az ASCII (7-bites) 
karakterkódolástól eltérő kódlapokat  (karakterkészletek) is használhatunk. 
Legegyszerűbben  a  #!-vel kezdődő sort követően az alábbi módon 
adhatjuk meg a használt karakterkészletet/kódtáblát:

# -*- coding: iso-8859-1 -*-

Ezt követően a forráskód minden karaktere az iso-8859-1 karaktertáblázat alapján értelmeződik, ezáltal közvetlenül unikódos (Unicode) beégetett szövegrészeket (string literal) használhatunk a programunkban. A választható kódlapok/karakterkészletek listája a Python Library Reference -ben a codecs fejezetben található.

For example, to write Unicode literals including the Euro currency symbol, the ISO-8859-15 encoding can be used, with the Euro symbol having the ordinal value 164. This script will print the value 8364 (the Unicode codepoint corresponding to the Euro symbol) and then exit:

Például olyan Unicode karaktereket akarsz írni, amelyek tartalmazzák az Euro pénznem jelét, az ISO-8859-15-ös kódolást használhatod -- melyben az Euro a 164-es karakterhelyen található.

A következő kis program Windows XP-n tesztelve 128-as értéket ír ki. (az előbbi 164-es értéket nem tudom miért írták a tutorialba, és miért 128-at ad vissza nálam a példaprogram - ford.)

 # -*- coding: iso-8859-15 -*-
 
 currency = u"€" # itt az euro szimbólumot gépeltük be.
 print ord(currency) # kimenete XP-n 128
 print chr(128)  # euro szimbólumot ír ki.
 

Amennyiben a szövegszerkesztőd lehetővé teszi a fájl UTF-8-ként való elmentését byte-sorrend megjelöléssel (BOM), akkor elég így elmenteni a fájlt és nem kell a fenti deklaráció. A fejlesztőkörnyezet (IDLE) ezt az Options/General/Default Source Encoding/UTF-8 menü útvonalon keresztüli beállítással támogatja. Megjegyzendő, hogy ezt a tulajdonságot csak a Python 2.3-as és a fejlettebb verziók kezelik helyesen; az operációs rendszer nem kezeli le, és ebben az esetben Unix rendszereken nem is tudja a #! sorozattal kezdődő (parancs)fájlokat értelmezni!

UTF-8 használatával (vagy a BOM, vagy a kódolás program eleji megadásával) beégetett szövegek (string literals) és a megjegyzések a világ legtöbb nyelvén beírhatók a programba -- egy fájlban több nyelvet is használhatunk. A változók neveiben továbbra is csak ASCII karaktereket szabad használni. A szövegszerkesztő csak akkor jeleníti meg hibátlanul a karaktereket, ha felismeri hogy UTF-8 fájlról van szó -- és olyan betűkészletet használ, amely minden megjelenítendő karakter képét tartalmazza.


2.2.4 Indítófájl párbeszédes üzemmódban

Párbeszédes (interaktív) üzemmódban használva a Pythont, sokszor kívánatos, hogy az értelmező futtatása előtt bizonyos parancsok mindig lefussanak. Ez a PYTHONSTARTUP nevű környezeti változó értékének megadásával történhet; itt kell megadni a futtatni kívánt parancsfájl nevét. Ez a megoldás azonos a Unix .profile fájl megoldásával.

Az indítófájl beolvasása csak párbeszédes üzemmódban történik; nem történik beolvasás ha a parancsok fájlból jönnek, vagy ha bemenetként a /dev/tty explicit módon lett megadva (amelyet egyébként párbeszédes üzemmódban az értelmező alaphelyzetben használ). Az indítófájl a futása során ugyanazt a névterületet (name space) használja mint a párbeszédes üzemmód, így a benne definiált vagy bele importált objektumok változatlanul, további pontosítás nélkül használhatók párbeszédes üzemmódban is. Ebben a fájlban a sys.ps1 és sys.ps2 értékeinek átírásával változtathatod a promtok értékeit.

Amennyiben az aktuális könyvtárból egy másik indítófájlt is szeretnél futtatni, megteheted a globális indítófájl szerkesztésével, ahogy ezt az alábbi példa mutatja: "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)



Footnotes

... promtnak.2.1
A GNU Readline csomag hibája ennek a funkciónak a működését megakadályozhatja.
See About this document... for information on suggesting changes.