[python] Konzolová aplikácia na webe

matesfila matesfila na host.sk
Úterý Únor 23 00:16:04 CET 2010


Ďakujem za typ - zdá sa, že ten ajaxterm, resp. príbuzné aplikácie, ku
ktorým sa dá cez ajaxterm doklikať, bolo presne to, čo som hľadal. Akurát
nevýhodou je, že to pravdepodobne nepodporuje diakritiku, čo je pre mňa tým
pádom nepoužiteľné. Takže nakoniec som si to urobil s využitím djanga sám a
docela to funguje.

Podarilo sa mi dosiahnuť taký stav, kedy jedna a tá istá verzia
konzolového programu sa dá spustiť jednak zo štandardného príkazového
riadku, a jednak funguje aj cez web, na ktorom sa požiadavka na vstup od
používateľa realizuje cez štandardný html vstupný prvok "edit".
Problémom tu však bolo, ako dosiahnuť, aby sa program bežiaci na serveri
pri požiadavke na vstup "pauzol" a počkal, kým používateľ (klient) cez web
zadá nejaký vstup a odošle ho serveru. Na štandardnej konzole je toto
"pauznutie" realizované štandardne funkciou input().

Vyriešil som to cez yield, ale toto riešenie sa mi celkom nepáči. Ideálne
by bolo, keby sa dala napísať taká funkcia input(), ktorá by počkala, kým
nebude splnená nejaká podmienka P, a potom by automaticky pokračovala
ďalej.

A v tomto by som potreboval poradiť!

Na jednoduchom príklade by sa problém dal znázorniť asi takto:

def otazka():
    print('Ako sa volas? ')
    meno = input()
    print('Tvoje meno je: ' + meno)

Na štandardnej konzole to funguje pekne, ale na webe musí metóda input
čakať na vstup od klienta. Teda na webe musi input() počkať na splnenie
nejakej podmienky P. Tou podmienkou môže byť napríklad to, či už vstup bol
zadaný, alebo ešte nie.

Netuším, ako by sa takáto input funkcia dala napísať. Ako som už povedal,
podarilo sa mi to nasimulovať cez coroutines, teda cez yield. Vyzerá to asi
tak, že namiesto volania input() volám yield na pravej strane výrazu.
Funguje to rovnako cez web aj štandardnú konzolu, ale nezdá sa mi to zrovna
elegantné. Ideálne by bolo, keby stačilo napísať "input()" a to by si už
automaticky počkalo na požadovaný vstup.

Jediné čo ma napadlo je, že by sa to asi nejako dalo urobiť cez thready...

Budem vďačný za každé nakopnutie...

Matúš


On Thu, 18 Feb 2010 14:11:39 +0100, Vladimir Macek <macek na sandbox.cz>
wrote:
> On 18.2.2010 14:07, matesfila wrote:
>> dajme tomu, že mám klasickú konzolovú aplikáciu napísanu v Pythone,
>> ktorá používa iba základné typy príkazov pre konzolu: print a input.
>> Chcel by som ale túto aplikáciu sprístupniť cez web, teda aby
>> fungovala na nejakej html stránke. Hlavnou motiváciou je, aby
>> aplikácia bola použiteľná odkiaľkoľvek.
> 
> Na serveru pouzivam ajaxterm na https jako berlicku, kdyz nektery z
> uzivatelu nema SSH. Je v Pythonu a urcite ho ohnete pro sve potreby.
> Byva v distribucich.


Další informace o konferenci Python