[python] sockety - problem s HTTP spojenim

Petr Prikryl PrikrylP na skil.cz
Středa Listopad 28 13:01:24 CET 2007


Tomy novella
> ------
> c = atlantis_client()
> c.buffer = "JEDEN PRIKAZ\r\n"
> c.buffer = "DRUHY PRIKAZ\r\n"
> ------
> 
> ... a odoslalo mi LEN tu druhu vec(v tomto pripade "DRUHY PRIKAZ\r\n")
> preco? ako mam odoslat obe?

Dvakrát za sebou se naplnil buffer, pokaždé
něčím jiným. Asi se mezi tím musí provést 
nějaká akce, která obsah bufferu odešle.

> 2) (filozoficka):  stale ked poslem po nejakom protokole prikaz, tak
> ma koncit "\r\n"? - totiz donedavna som novy riadok ukoncoval len
> "\n"a stacilo to, preco je tak aj \r  ved to je tabulator a ten predsa
> nevidno! :) aspon ja v tom nevidim logiku ;(

Není to filosofická, ale technická otázka. Sekvence \r reprezentuje
řídicí znak Carriage Return (návrat vozíku), posloupnost \n
reprezentuje řídicí znak Line Feed (odřádkování). Oba řídicí znaky
dostaly název v době, kdy vznikl klasický mechanický dálnopis.
Znamenaly skutečně takto pojmenované mechanické akce. (Proto se taky
řídícím znakům začalo říkat řídicí znaky.) V uvedeném
pořadí se používaly proto, protože mechanická konstrukce dovolovala,
aby se přechod na nový řádek (pootočení válce) prováděla i při
pohybu vozíku na začátek. Pro zpětný pohyb vozíku tedy bylo dvakrát
tolik času. Tolik tedy k postrádané logice.

Postupem doby se sekvence označovaná také jako CR LF stala oddělovačem
řádků v textových souborech, které už se na dálnopisnou stanici
neodesílaly. V unixových systémech se vypustilo \r, u Mac je to 
myslím naopak. V DOSu a ve Windows zůstaly oba znaky.

Aby se to programátorsky sjednotilo, zavedl se pojem "otvírání
souboru v textovém režimu", kdy se všechny možné koncové sekvence
při načítání upravují na jediný znak \n a při zápisu se \n
expanduje na příslušnou sekvenci, která se používá v daném OS.

Pokud se ale soubor otvírá binárně, je nutné zapisovat všechny
znaky koncové sekvence. Při odesílání přes buffer se typicky
pracuje v binárním režimu.

(Rýpnu si.) Unixoví programátoři otvírání souborů v textovém 
režimu často ignorují právě proto, že při otvírání v binárním
režimu se vše v Unixu chová stejně, jako v textovém režimu.
Díky tomu někteří na-Unix-hrdí jedinci vytvářejí špatně
přenositelné zdrojové texty.

Python až do verze 3.0 nedefinuje přísný datový typ řetězec
(ne unicode). Do uvozovek zapisujeme posloupnost bajtů, i když
nám je editor ukazuje jako písmenka. Ke konverzi jednoho znaku
\n z řetězce na příadnou dvojici dochází až při zápisu 
do souboru otevřeného v textovém režimu -- a to jen v DOS/Windows. 
Nikdy jindy.

pepr

> PS: prosim v mailoch tykat! nie vykat ;)

P.S. Klidně mi v mailech vykej. Není to věc použitého média ;)


Další informace o konferenci Python