Vymyslet si muzes cokoliv, jde jen o to jak moc to ma byt chytry a slozity. Celkem bezny pristup je mit zvlast parser vstupu coz byva nejaky stavovy stroj, cili instance objektu ktery zere vstup a pada z nej nejaka abstraktni reprezentace. V pripade nejakeho interpretru by to byly objekty reprezentujici prikazy. Cili zjednodusene neco zhruba v tomto smyslu (YMMV):
for cmd in InputReader(sys.stdin): if cmd is GameOver: break if cmd.comment: continue cmd.process(sys.stdout) To jen tak ciste akademicky, jestli dobre rozumim o co se snazis tak vyrabis s prominutim hroznou blbost a nejakej vlastni parser je mimo diskusi. To co vidim je (radoby) shell, a nejlepsi shell je shell sam. Trable s cwd jsou jen to nejmensi z potizi ktere te na soucasnem kurzu cekaji. Pokud opravdu potrebujes shell se vsim vsudy, tak si proste pust proces bashe pres popen. V praxi to neni uplne jednoduche protoze budes muset resit veci kolem emulace terminalu (coz je prakticky to o co se pokousis) ale je to resitelne – midnight i screen to tak delaji. Snazit se porozument syntaxi (neznameho!) shellu resitelne neni. Predstav si takovyhle vstup: ( mkdir /tmp/spam ; chmod 700 /tmp/spam ) && cd /tmp/spam To je celkem bezny obrat, ver tomu ze opravdovy unixak pro kazdy dalsi ohak ktery vymyslis najde tri zpusoby jak nebude fungovat. Nejjednodussi reseni je se smirit s tim ze subshell je subshell a ma vlastni cwd. Vsechny ostatni programy to tak taky delaji, lidi jsou na to zvykli a neni na tom nic spatneho. On 01/14/13 19:18, Roman Beno wrote: > Na to už som natrafil. > Čo sa týka Raiczeho kritiky, podobný systém s "odkazom na metódy jednej > konkrétnej instancie" je uplatnený v module random. > > Ešte by som mal jednu otázku, je to skôr vec názoru.. Nakoľko vyššie > spomínané príklady sa toho nejak veľmi netýkajú. > > Tak napríklad ten triviálny príklad s triedou PrikazovyRiadok :-) > > V časti > > if __name__="__main__": > # čo robit s instaciou(ami) po spustení z termu.. > .... > > by mohlo byť: > > A) > inst=PrikazovyRiadok() > inst.proces() > > alebo > B) > urobit metodu proces tak aby sa self.proces() robil len raz, napr: > def proces(self): > self.prikaz=input("Zadajte: "") > if self.prikaz.startswith("cd"): > ..... > elif self.prikaz.startswith("pwd"): > ..... > else: > os.system(self.prikaz) > > a potom už v časti if __name__ .... > inst=PrikazovyRiadok() > while True: > inst.proces() > if self.prikaz=="0": > break > > atd atd proste v triede stanovit iba to nevyhnutné a prácu s metodami > instancie nechat do tohto bloku. > Skor sa však priklanam k možnosti A. > > Ďakujem za odpoved > Roman _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python