Subsections

 
2. Používáme interpretr jazyka Python

 
2.1 Spuštění běhového systému

Interpretr jazyka Python je většinou nainstalován jako soubor /usr/local/bin/python. Máte-li zařazen adresář /usr/local/bin do cesty, v níž shell vyhledává spustitelné soubory, můžete prostředí jazyka spustit přímo zapsáním příkazu

python

Jméno adresáře, v němž je Python nainstalován, je závislé na volbách nastavených při jeho překladu, proto je možné, že ve vašem systému tomu bude jinak. Více informací vám jistě sdělí správce vašeho systému.

Pro ukončení interpretru stiskněte znak konce souboru (EOF, Control-D v systému Unix, Control-Z v systémech Dos a Windows). V tomto případě předá prostředí jazyka shellu návratovou hodnotu 0. Nelze-li interpretr takto opustit, lze použít následující příkaz: "import sys; sys.exit()".

Editování příkazového řádku v interpretru jazyka Python není příliš pohodlné. Proto lze interpretr v Unixovém prostředí zkompilovat s podporou knihovny GNU Readline, která zpřístupní historii příkazů i doplňování jmen příkazů a proměnných. Velice rychlý způsob, jak zjistit, zda váš interpretr podporuje tuto knihovnu, je zapsání znaku Control-P po první výzvě, kterou dostanete po spuštění Pythonu. Jestliže se ozve pípnutí, má interpretr pravděpodobně podporu knihovny Readline zakompilovánu. Jestliže se objeví znaky P, pak nejsou rozšířené úpravy příkazového řádku podporovány a vy můžete používat pouze klávesu Backspace pro smazání předchozího znaku. Pro další informace o konfiguraci součinnosti interpretru a knihovny GNU Readline se podívejte do Dodatku A.

Interpretr pracuje podobně jako shell systému Unix: když je spuštěn a jeho standardní vstup je spojen s terminálovým zařízením, načítá a spouští příkazy interaktivně. Je-li mu při spuštění předáno jako argument jméno souboru, případně je standardní vstup přesměrován z nějakého souboru, čte a spouští příkazy přímo z tohoto souboru - skriptu.

Třetí způsob, jak lze provést libovolný kód jazyka Python, je spuštění příkazu "python -c příkazy [argumenty] ...", jenž rovnou vykoná příkazy. Jde o obdobu stejnojmenné volby unixového shellu. Jelikož příkazy jazyka Python často obsahují mezery nebo jiné speciální znaky musí se uvodit nejlépe dvojitými uvozovkami, aby se zabránilo jejich interpretování shellem.

Pamatujte, že je rozdíl mezi spuštěním příkazu "python soubor" a "python < soubor". V případě prvním se nejprve načte a zkontroluje celý soubor, na případné chyby v syntaxi se tudíž přijde ihned, ještě před spuštěním prvního příkazu. Ve druhém případě se načítají příkazy jeden po druhém, následně jsou kontrolovány a spouštěny, je-li některý příkaz syntakticky chybně, zjistí se to až těsně před jeho spuštěním. Pozornost je třeba také věnovat příkazům, které čtou vstup od uživatele, přesměrování standardního vstupu totiž platí i pro ně a ty tudíž (nechtěně) načtou následující kód programu.

Velice častým požadavkem je po vykonání skriptu spustit interaktivní mód a tím pádem předat řízení programu uživateli, čehož lze s výhodou využít při ladění programů apod. To zajistí volba -i předaná příkazu python (tato volba nefunguje správně v případě přesměrovaného standardního vstupu).

 
2.1.1 Předávání argumentů

Jméno skriptu a další argumenty předané z příkazového řádku jsou uloženy v proměnné sys.argv. Jedná se o seznam řetězců obsahující minimálně jeden prvek - jméno skriptu. Pouze je-li aktivní interaktivní mód, pak je prvek sys.argv[0] roven prázdnému řetězce. Jde-li o skript čtený ze standardního vstupu, je sys.argv[0] nastaven na hodnotu '-'. Při použití volby -c příkazy odpovídá nultý prvek seznamu sys.argv hodnotě '-c'. Zde je důležité podotknout, že všechny argumenty předané za -c příkazy již nejsou interpretrem zpracovány, dojde pouze k jejich uložení do seznamu sys.argv.

 
2.1.2 Interaktivní mód

Jsou-li příkazy čteny z terminálu, říkáme, že interpretr je v interaktivním módu. V tomto módu se nejprve zobrazí uvítací zpráva obsahující informace o verzi a autorských právech. Následně běhové prostředí vytiskne primární výzvu (většinou ">>") a čeká na zadání příkazu. Pro vstup složitějších příkazů rozložených přes více řádků se používá i sekundární výzva (implicitně "... ").

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

Typickým příkladem víceřádkového příkazu jsou konstrukce pro řízení toku programu. Jako příklad si uvedeme konstrukci if:

>>> zeme_je_placka = 1
>>> if zeme_je_placka:
...     print "Bacha, ať z ní nespadnete!"
... 
Bacha, ať z ní nespadnete!

 
2.2 Běhové prostředí jazyka Python

 
2.2.1 Obsluha chyb

Při výskytu chyby vytiskne interpretr chybovou zprávu obsahující výpis volaných funkcí a popis chyby samotné. Dojde-li k chybě v interaktivním módu, vrátí se řízení zpět k primární výzvě, při vzniku chyby ve skriptu se nejprve vytiskne hlášení o chybě a poté se skript ukončí s nenulovým návratovým kódem (v tomto případě nejsou výjimky obsloužené větví except příkazu try brány jako chyby). Všechna chybová hlášení jsou vypisována na standardní chybový výstup, čímž se zabrání pomíchání chybových výpisů s výstupem samotného programu (ten je vypisován na standardní výstup). Fatální chyby jako vnitřní nekonzistence datových struktur či některé případy vyčerpání paměti můžou způsobit rovnou ukončení interpretru s nenulovým návratovým kódem.

Stisk kombinace Control-C (případně DEL) vyvolá přerušení. To v interaktivním módu způsobí okamžitý návrat k primární výzvě. 2.1Přerušení vzniklé za běhu příkazu ho ukončí a vyvolá výjimku KeyboardInterrupt, kterou lze odchytit obvyklým způsobem příkazem try. 2.2

 
2.2.2 Spustitelné skripty

Na BSD kompatibilních systémech Unix můžete libovolný skript jazyka Python učinit spustitelným souborem uvedením této "magické" sekvence na začátku souboru:

#!/usr/bin/env python

(Stejný postup jistě znají ti, kteří píší skriptu unixového shellu.)

Pokud má skript nastaven executable bit (viz. příkaz chmod(1), více informací v manuálových stránkách) a spustitelný soubor interpretru se nachází v uživatelově implicitní cestě (tj. cestě, kde shell vyhledává spustitelné soubory a příkazy, určuje jí proměnná prostředí PATH), lze tento skript spustit přímo z příkazové řádky shellu. Je důležité, aby znaky "#!" byly první dva znaky celého souboru. Všimněte si, že znak "#" je v Pythonu použit jako začátek komentáře, tudíž sekvence "#!" je interpretrem považována za obyčejný komentář.

 
2.2.3 Soubory načítané při startu interpretru

Používáte-li Python interaktivně, často potřebujete spouštět některé příkazy při každém startu prostředí. To lze snadno zajistit nastavením proměnná prostředí PYTHONSTARTUP tak, aby ukazovala na jméno souboru obsahujícího požadované příkazy. Tento soubor je obdobou souboru .profile v unixových shellech.

Podobně jako .profile je i tento soubor čten pouze v případě interaktivního sezení, při spouštění skriptů se neuplatní! Všechny příkazu načítané na začátku interaktivního sezení jsou spouštěny ve stejném prostoru jmen, ve kterém následně budou interaktivně spouštěny příkazy. Tudíž ty objekty, které tyto příkazy definují (nebo importují) lze používat přímo v příkazech, které spouštíme v interaktivním módu. V případě potřeby můžete v tomto souboru nastavit i výzvy interpretru (primární výzvu reprezentuje proměnná sys.ps1, sekundární sys.ps2).

Pokud potřebujete načítat i soubor, který je uložen v pracovním adresáři (pro nastavení různých voleb pro různé projekty apod.), musíte v hlavním souboru, na nějž ukazuje proměnná PYTHONSTARTUP, zapsat příkazy na způsob:

if os.path.isfile('.pythonrc.py'):
    execfile('.pythonrc.py')

Přejete-li si načítat soubor uvedený v proměnné PYTHONSTARTUP i v případě skriptů, musíte tento soubor spustit sami. To učiní tyto příkazy uvedená na začátku skriptu:

import os
filename = os.environ.get('PYTHONSTARTUP')
if filename and os.path.isfile(filename):
    execfile(filename)



Footnotes

... výzvě.2.1
Chybně nakonfigurovaná knihovna GNU Readline může tento stisk odchytit, k přerušení pak nedojde
...try. 2.2
Více o výjimkách viz. kapitola 8.
Viz O tomto dokumentu... kde naleznete informace, jak upozornit na případné chyby.