Subsections

 
2. Používání interpretru jazyka Python

 
2.1 Spuštění interpretru

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

python

Jelikož je jméno adresáře, kde je interpretr jazyka nainstalován, závislé na jeho instalaci, je možné, že ve vašem systému bude umístěn na jiném místě, více informací nejspíše získáte od administrátora vašeho systému.

Zapsání znaku konce souboru (EOF, Control-D v systému Unix, Control-Z v systémech Dos a Windows) způsobí ukončení interpretru s návratovou hodnotou 0, která je předána shellu. Jestliže tato možnost nefunguje, můžete ukončit interpretr následujícím příkazem: "import sys; sys.exit()".

Editování příkazového řádku v interpretru jazyka Python není příliš pohodlné. V systémech Unixale může být interpretr zkompilován s podporou knihovny GNU readline, díky které již je přístupná třeba historie příkazů nebo doplňování jmen příkazů a proměnných. Rychlý způsob, jak zjistit, jestli váš interpretr tuto podporu obsahuje je napsáním znaku Control-P po první výzvě, kterou dostanete po spuštění Pythonu. Jestliže se ozve pípnutí, máte interpretr zkompilován s knihovnou readline, viz. Dodatek A, kde najdete úvod do klávesových zkratek použitelných v knihovně readline. Jestliže se nic nestane nebo se objeví znaky P, rozšířené úpravy příkazového řádku nejsou podporovány a vy můžete používat pouze klávesu Backspace pro smazání předchozího znaku na aktuální řádce.

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ě, když je mu při spuštění předáno jako argument jméno souboru nebo standradní vstup je přesměrován z nějakého souboru, čte a spouští příkazy z tohoto souboru - skriptu.

Třetí cesta, jak lze interpretr spustit, je "python -c command [arg] ...", který spustí příkazy command, což odpovídá volbě -c 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 "python file" a "python < file". V prvním případě je načten parserem celý soubor ještě před spuštěním programu interpretrem a proto interpretr rozpozná přímo jeho konec. Ve druhém případě ale načítá příkazy postupně ze standardního vstupu dokud není standardní vstup uzavřen (tj. dokud není soubor celý přečten), takže na případné chyby v syntaxi se přijde až při pokusu o jejich spuštění, kdežto u prvního zápisu jsou tyto chyby zjištěny již při načtení souboru. Rovněž je třeba dávat pozor na ty příkazy, které vyžadují vstup od uživatele, jako input() a raw_input(), protože nebudou načítat data z terminálu ale ze souboru file.

Když je použit skript, je někdy užitečné po ukončení skriptu spustit interaktivní mód, což zajistí volba -i předaná příkazu python (toto nefunguje v případě, kdy je skript čten ze standardního vstupu, je tomu tak ze stejných důvodů, jaké byly uvedeny v předchozím odstavci).

 
2.1.1 Předávání argumentů

Jméno skriptu a další argumenty uvedené za ním jsou předány v proměnné sys.argv, která je seznamem řetězců o minimálně jednom prvku; když se nejedná o žádný skript a nejsou uvedeny žádné argumenty, prvek sys.argv[0] je prázdný řetězec. Jestliže je skript čten ze standardního vstupu, sys.argv[0] je rovno '-'. Je-li použita volba -c command, sys.argv[0] je nastaveno na '-c'. Volby předané za -c command již nejsou zpracovány interpretrem, ale jsou uloženy do pole sys.argv pro jejich pozdější využití interpretovaným kódem.

 
2.1.2 Interaktivní mód

Jsou-li příkazy čteny z terminálu, říkáme, že interpretr je v interaktivím módu. V tomto módu zobrazí primární výzvu (většinou ">>") a čeká na zadání příkazu. Pro příkazy, které jsou na více než jednom řádku, používá sekundární výzvu (implicitně "... "). Před zobrazením první výzvy interpretr ještě vytiskne uvítací zprávu obsahující informace o jeho verzi a autorských právech.

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 příkazu, který je rozložen přes více řádků jsou konstrukce pro řízení toku programu. Jako příklad si uvedeme konstrukci if:

>>> svet_je_plochy = 1
>>> if svet_je_plochy:
...     print "Bacha, ať z něj nespadnete!"
... 
Bacha, ať z něj nespadnete!

 
2.2 Prostředí interpretru jazyka Python

 
2.2.1 Obsluha chyb

Objeví-li se chyba, vytiskne interprert chybovou zprávu a výpis volaných funkcí. V interaktivním módu se vrátí k primární výzvě; když vstup pochází ze souboru, interpretr se po vytisknutí výpisu funkcí ukončí s nenulovým návratovým kódem (výjimky obsloužené větví except v konstrukci try nejsou v tomto kontextu brány jako chyby). Některé zásadní chyby jako vnitřní nekonzistence nebo některé případy vyčerpání paměti způsobí rovnou ukončení interpretru s nenulovým návratovým kódem. Všechny chybové zprávy jsou vypisovány na standardní chybový výstup, čímž se zabrání pomíchání chybových výpisů s výstupem programu, který se objeví na standardním výstupu.

Přerušení (většinou stisk kombinace Control-C nebo DEL) během zadávání příkazu (je jedno jestli na primární nebo sekundární výzvě) způsobí návrat k primární výzvě.2.1Přerušení vyvolané při běhu příkazu vyvolá výjimku KeyboardInterrupt, kterou můžete odchytit konstrukcí try.

 
2.2.2 Spustitelné skripty jazyka Python

Na BSD kompatibilních systémech Unix mohou být skripty v Pythonu, podobně jako shell skripty, přímo spustitelnými soubory. Stačí na začátek souborů uvést "magickou" sekvenci

#!/usr/bin/env python

Skript pak můžeme spustit přímo z příkazové řádky shellu za předpokladu, že se interpretr se nachází v uživatelově implicitní cestě (proměnná prostředí PATH) a skript má nastaven executable bit. Znaky "#!" musí být první dva znaky celého souboru. Znak "#" je v Pythonu použit jako začátek komentáře a proto je sekvence "#!" interpretrem považována za obyčejný komentář.

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

Používáte-li Python interaktivně, je častým požadavkem spouštět některé příkazy pokaždé, když spustíte interpretr. To lze velice snadno učinit nastavením proměnné prostrědí PYTHONSTARTUP tak, aby ukazovala na jméno nějakého souboru obsahujícího požadované příkazy. Tento soubor pak bude obdobou souboru .profile v unixových shellech.

Tento soubor je čten pouze v případě interaktivních interpretrů, neděje se tak, když Python načítá příkazy ze skriptu nebo když je soubor /dev/tty explicitně určen jako zdroj příkazů. Příkazy načítané na začátku interaktivního sezení jsou spouštěny ve stejném prostoru jmen, kde budou posléze spouštěny i interaktivní příkazy, takže objekty které tyto příkazy definují nebo importují jsou zpřístupněny bez použití plně kvalifikovaných jmen. V tomto souboru taktéž můžete nastavit výzvy (primární sys.ps1 a sekundární sys.ps2).

Když chcete načítat další soubor z aktuálního adresáře, musíte v hlavním souboru napsat cosi jako "if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')". Pokud chcete načítat soubory i při spuštění skriptů, musíte tak učinit explicitně:

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



Footnotes

... výzvě.2.1
Při chybně nakonfigurované knihovně GNU Readline se tak stát nemusí.
See About this document... for information on suggesting changes.