[python] Stopky

Hynek Fabian hynek.fabian na firma.seznam.cz
Pátek Říjen 22 16:53:49 CEST 2010


Predpokladam ze tvuj problem neni ten cyklus, ale jak to udelat aby cekani na 
vstup neblokovalo donekonecna.
Zpusobu je vic, co me tak z hlavy napada jako relativne nejjednodussi je 
nechat si za pet minut dorucit signal z casovace, viz modul signal.
Python instaluje implicitni handler ktery vystreli vyjimku KeyboardInterrupt, 
takze na ukonceni programu nepotrebujes vlastne nic nez zavolat 
signal.setitimer() a pak si tu vyjimku odchytit. Behem prace casovac vypnes 
nastavenim na 0. Nebere to v uvahu zastaveni pomoci ^S ale to te predpokladam 
netrapi.
Pokud (az :-) budes chtit neco slozitejsiho, budes potrebovat si prepnout 
stdin do neblokujiciho modu (O_ASYNC) pomoci modulu fcntl. Pak si budes ale 
muset sam resit blokovani (neblokujici nekonecna smycka neni dobry napad) a 
obecne to neni trivialni zalezitost.
Hotove neblokujici cteni je nekde v modulu curses. Nevim jestli jde nejak 
rozumne pouzit bez zbytku curses (initscr() prakticky obrati terminal naruby 
coz nemam rad), ale jestli chces hybat kurzorem, barvicky apod. tak je curses 
asi nejlepsi zpusob.
Jestli jsi na wydlich tak jsou urcite i jine zpusoby (conio?) ale to tom nic 
nevim.

remixus79 (Friday 22 October 2010 13:37:06):
> Zdravím,
> 
> potreboval by som poradiť. Mám program v ktorom je nekonečný cyklus.
> Tento cyklus stale caka na vstup od uzivatela. Potreboval by som to
> spraviť tak že by stále čakal na ten vstup ale zároveň by aj
> kontroloval čas a ak by užívateľ nič nezadal po 5minútach by sa
> vypol.
> 
> 
> Ďakujem za každú radu.
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python


Další informace o konferenci Python