přihlásit 21243/822454

Spouštění programů

Python je Interpretovaný jazyk, to znamená, že program se nepřekládá do instrukcí procesoru a nespouští se přímo. Místo toho ho čte jiný program – interpret (jazyka Python) – a teprve ten dává příkazy procesoru. Spuštění programu napsaném v Pythonu tak představuje spuštění interpretu, kterému se jako parametr předá soubor s programem. Svou podstatou je to stejné jako spuštění nějakého editoru pro editaci vybraného souboru.

K tomu je nutno ještě říct, že máme dva druhy programů a to s textovým rozhraním, které běží v terminálu a s grafickým rozhraním, které se označují jako GUI programy. V Linuxu se běžně používá obojí, ve Windows se běžně používají jen GUI programy.

Tvorba GUI programů je náročnější a pro pochopení základů jazyka není GUI vůbec potřeba, spíš naopak překáží. To proto, že příklady komplikuje a odvádí pozornost od podstatného. Při vysvětlování, dejme tomu co to je cyklus nebo funkce a jak se jí předávají parametry jednoduše není GUI potřeba a co není potřeba, to je rušivé. Proto se začátečnící i ve windows z počátku učí programovat na jednoduchých textových programech, přestože jejich používání je ve Windows poněkud komplikované. Zde je vysvětleno, jak spouštět konzolové programy napsané v Pythonu.

Zdrojový kód

Psát program znamená psát v libovolném textovém editoru zdrojový kód. Zdrojový kód Pythonu je sled příkazů jazyka Python napsaných do souboru s příponou .py. Spuštění pythoního programu je jednoduché, protože se nemusí kompilovat, linkovat ani nic podobného. Stačí spustit interpret Pythonu (program python) a předat mu název souboru se zdrojovým kódem programu jako parametr. To lze udělat různými způsoby. Mějme jednoduchý program pozdrav.py:

pozdrav = "Ahoj Lidi!"
print pozdrav

Základní způsob spuštění programu

Nyní stačí spustit nějaký terminál s příkazovým řádkem a v adresáři, kde je program uložen, zadat příkaz python pozdrav.py Program se provede.

screenshot: spuštění programu
Základní spuštění programu

Tohle ale nebude fungovat ve Windows, které mají příkazovou řádku nepřívětivou a těžkopádnou. Windows neví, kde je Python nainstalován. Je jim to třeba říci. Buď pokaždé a nebo jednou pro vždy. Dejme tomu, že jsme Python nainstalovali do adresáře c:\python24\.

Potom ve Windows musíte buď pokaždé použít příkaz c:\python24\python pozdrav.py a nebo do souboru c:/autoexec.bat vložit řádek:

PATH=%PATH%;c:\python24

a restartovat počítač. Potom už to funguje jako v Linuxu. Sofistikovanější řešení najdete popsané v dokumentu Python na flshce.

Windowsoidní způsob spuštění programu

Ve Windows je příkazová řádka vůči uživatelům nepřátelská a ti ji proto nemají rádi, přestože se s ní některé věci dělají pohodlněji než klikáním. Python to respektuje. Windowsoidní způsob předání souboru programu vede přes poklepnutí na ikonku souboru. S příponou souboru je asociován nějaký program, který se spustí a soubor na jehož ikonku jsme poklepali se mu předá jako parametr. V takovém případě u programů s textovým rozhraním Python sám otvírá terminálové okno, takže se uživatel nemusí zaobírat příkazovým řádkem a spouštět terminál předem. Zdůrazňuji, že tak je tomu jenom ve Windows.

Po instalaci Pythonu do Windows jsou přípony souborů, které Python používá, již příslušně asociovány, takže stačí poklepat na ikonku souboru pozdrav.py a program se v interpretu Pythonu sám spustí.

Skrývá se tu ale jedna záludnost. Při spuštění interpretu se sice otevře okno a pozdrav se do něj vypíše, ale tím se náš program ukončí a s ukončením programu se ukončí i interpret Pythonu, čímž dojde k zavření okna. To proběhne tak rychle, že z pohledu uživatele to okno jen problikne.

Jsou dvě možná řešení. Buď na konec programu přidáme příkaz:

raw_input('\n*Stiskni Enter pro konec*')

který zajistí, že okno se nezavře, dokud uživatel nestiskne klávesu Enter, což ale není moc šťastné řešení. Třeba proto, že když bude v programu nějaká chyba, tak se tento příkaz už neprovede a okno se zase zavře i s chybovým hlášením.

Druhé řešení je, že interpretu řekneme, aby se po ukončení programu sám neukončil a místo toho se přepnul do interaktivníhoho režimu. To je velmi výhodné hlavně při programování, protože po skončení programu můžete ještě zadávat příkazy, jako by program pokračoval, můžete zkoumat a měnit obsah proměnných, hrát si s vytvořenými funkcemi a podobně. Že se má interpret po ukončení programu přepnout do interaktivního režimu mu přikážeme parametrem -i. Příklad:

screenshot: interaktivní konec
Interaktivní konec

Při porovnání s předchozím screenshotem je vidět, že se Python neukončil, ale přepnul se do interaktivního režimu (indikováno znaky >>>), čehož jsem využil k tomu, že jsem si zjistil velikost proměnné pozdrav, jenž byla vytvořena za běhu programu. Jestliže nemáte žádné zkušenosti s programováním, tak vám to možná přijde samozřejmé, ale věřte, že takové služby a tak jednoduše hned tak nějaký jazyk nenabízí.

Teď je tu otázka, jak ve Windows předat interpretu Pythonu ten parametr -i. Zase je řada možností, uvedu tu, která se mi zdá nejlepší. Nejlepší se mi zdá přejmenovat program pozdrav.py na pozdrav.pyi a ručně asociovat příponu .pyi s programem python. Při té asociaci nezapomeneme přidat za název programu parametr -i. Tak si budeme moci příponou určit, zda chceme, aby program končil normálně nebo interaktivně.

Tu samou techniku Python ve Windovs už používá s příponou pyw, která má ten efekt, že interpret při spuštění neotvírá terminálové okno. Používá se to u GUI programů (programů s grafickým rozhraním), které terminálové okno nepotřebují.

Pokud i tohle se zdá někomu moc složité, třeba proto, že neví jak pracovat s asociacema přípon ve Windows, tak má ještě jednu možnost. Používat nějaké IDE, protože ty v sobě mají mimo jiné zabudovány funkce pro snadné spouštění vyvíjených programů. Například v PythonWin je to ikonka běžícího panáčka:

screenshot: spuštění v PythonWin
spuštění v PythonWin

Linuxový způsob spouštění programu

I v Linuxu se dá spouštění pythoního programu trochu vylepšit. V Linuxu lze z pythoního programu (souboru se zdrojovým kódem) udělat spustitelný soubor příkazem chmod a+x pozdrav.py. Když takový soubor spustíme, pokusí se ho vykonat shell, takže je nutno shellu dát nějak vědět, že tento soubor má předat pythonímu interpretu. V Linuxu se na to nepoužívají přípony souboru, ale technika prvního komentářového řádku, na kterém shellu předáváme příslušné informace, co s tím souborem má dělat. V tomto smyslu vypadá upravený program takto:

#!/bin/env python
pozdrav = "Ahoj Lidi!"
print pozdrav

Takto upravený program (nezapomeňte na ten chmod) lze spustit standardním linuxovým způsobem:

screenshot: spuštění programu v Linuxu
spuštění programu v Linuxu

Mějte na paměti, že v Linuxu interpret Pythonu nikdy sám neotvírá okno terminálu. Chcete-li aby program běžel v terminálu, spusťte ho v něm.

I v Linuxu lze zařídit interaktivní konec programu bez nutnosti to zadávat na příkazovém řádku. Stačí první řádek programu upravit na tvar:

#!/bin/env python -i

Závěr

Zevrubně jsem probral několik možností, jak spustit pythoní program ve Windows a v Linuxu a jak si to trochu usnadnit. Na Mac OS to bude asi také trochu jiné, když tam není příkazový řádek k dispozici vůbec a programům nejde předávat parametry. Ale s ním bohužel nemám žádné zkušenosti. Kdyby chtěl někdo můj text doplnit, budu rád. Na Mac OS X, který již má Unixovou infrastrukturu, to bude hodně podobné jako v Linuxu, předpokládám.


Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /web/htdocs2/wraithcz/home/www/python/data/sessions/sessions1.php on line 2