20.03.2017 Views

Raspberry Pi - Uživatelská příručka

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

KAPITOLA 11 Úvod do jazyka Python<br />

pouhého operátoru = používá operátor +=, budou přijatá data připojena ke stávajícímu obsahu<br />

vyrovnávací paměti. Hodnota 1 024 bajtů je zvolena víceméně náhodně.<br />

V dalším kroku je potřeba rozdělit vyrovnávací paměť na jednotlivé řádky textu. Slouží k tomu<br />

následující řádky programu:<br />

radky = prijimaci_pamet.split(‚\r\n‘)<br />

prijimaci_pamet = radky.pop();<br />

První řádek nastaví proměnnou radky tak, aby obsahovala celý řádek textu z přijímací vyrovnávací<br />

paměti. To zajišťuje funkce split, která vyhledává znaky EOL (end of line – konec<br />

řádku) symbolizované řetězcem \r\n. Tyto znaky se vyskytují pouze na konci řádku. Jestliže je<br />

tedy vyrovnávací paměť rozdělena tímto způsobem, máte jistotu, že proměnná radky obsahuje<br />

pouze kompletní řádky odpovědí ze serveru. Instrukce pop na druhém řádku zajišťuje, že jsou<br />

z proměnné prijimaci_pamet odebírány pouze úplné řádky: vzhledem k tomu, že odpovědi ze<br />

serveru jsou načítány v dávkách po 1 kB, je pravděpodobné, že v libovolném okamžiku bude<br />

vyrovnávací paměť obsahovat pouze části řádku. V tomto případě zůstane neúplný řádek ve<br />

vyrovnávací paměti a čeká na načtení zbytku řádku při následujícím průběhu cyklu a přijetí<br />

dalšího 1 kB dat ze serveru.<br />

V této fázi proměnná radky obsahuje seznam úplných odpovědí – celých řádků – přijatých<br />

ze serveru. Zadejte následující kód, který tyto řádky zpracuje a zjistí jména účastníků kanálu:<br />

for radek in radky:<br />

odpoved = radek.rstrip().split(‚ ‚, 3)<br />

kod_odpovedi = odpoved[1]<br />

if kod_odpovedi == RPL_NAMREPLY:<br />

seznam_jmen = odpoved[3].split(‚:‘)[1]<br />

jmena += seznam_jmen.split(‚ ‚)<br />

Tyto příkazy jsou provedeny pro každý řádek nalezený v proměnné radky a zjišťují číselný kód<br />

odpovědi, který poskytl server IRC. Existuje sice mnoho různých kódů odpovědi, ale tento<br />

program se zajímá pouze o dva z nich, které byly definovány jako konstanty na začátku programu:<br />

353, který znamená, že následuje seznam jmen, a 366, který označuje konec seznamu.<br />

Příkaz if vyhledá první z těchto odpovědí a poté pomocí funkce split načte jména a přidá<br />

je do seznamu jmena.<br />

V této fázi seznam jmena obsahuje všechna jména, která byla přijata ze serveru v rámci odpovědi<br />

na dotaz programu. Jména některých uživatelů však mohou chybět: do přijetí odpovědi<br />

366, která signalizuje konec názvů členů, není seznam úplný. Proto poslední řádek – jmena +=<br />

seznam_jmen.split(‚ ‚) – nově přijatá jména k existujícímu seznamu připojuje, místo aby<br />

seznam úplně přepsal: při každém spuštění této části kódu program pravděpodobně přijme<br />

pouze část celého seznamu členů. Chcete-li jazyku Python sdělit, jak má postupovat po získání<br />

kompletního seznamu, zadejte tyto řádky:<br />

if kod_odpovedi == RPL_ENDOFNAMES:<br />

# Zobrazi jmena<br />

print ‚\r\nUzivatele pro %(kanal)s:‘ % irc<br />

for jmeno in jmena:<br />

169

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!