Portál AbcLinuxu, 28. dubna 2024 03:10


Dotaz: Python - konceni programu uzivatelem

tomes.io avatar 3.10.2012 01:40 tomes.io | skóre: 12 | blog: tomesh
Python - konceni programu uzivatelem
Přečteno: 238×
Odpovědět | Admin
Ahoj, zacal jsem se ucit Python a potykam se s problemem, jak ukoncit bezici skript. Chci vyuzit slovnik, protoze chci, aby uzivatel volil ruzne funkcionality dle klicovych slov definovanych ve slovniku. Kdyz si nadefinuji klicove slovo SHUTDOWN a k nemu funkci, ktera ukoncuje program, tak, paklize fce stoji nekde osamote mimo cyklus, skript ukonci. Je-li ale v cyklu, tak nijak nereaguje.

Uvedu ilustracni priklad:
#!/usr/bin/python


def read():

    str = raw_input('Napis neco: ')
    return str
    
def write(msg):
    
    print msg
    
def cmd_shutdown():

    raise SystemExit
    
def pokusna():
    
    print "POkus"
    cmd_shutdown()
    
COMMANDS = {}
COMMANDS['SHUTDOWN'] = cmd_shutdown
COMMANDS['POKUS'] = pokusna
    
if __name__ == "__main__":
    while True:
        try:
            msg = read()
            
            if msg in COMMANDS:    
                COMMANDS[msg]
         
            write(msg)
                  
        except (KeyboardInterrupt, EOFError):
            break
Pokud uzivatel zada na vstupu klicove slovo, tak se provede prislusna fce. V propade slova POKUS vse funguje a fce pokusna() se provede, ale pokud zadam SHUTDOWN, tak se to jen prepise na obrazovku a fce cmd_shutdown() se vubec neprovede.

Jsem v Pythonu novy a spoustu veci nevim, takze je mozne, ze se jedna o prkotinu, kazdopadne budu rad za jakykoliv hint.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

tomes.io avatar 3.10.2012 01:50 tomes.io | skóre: 12 | blog: tomesh
Rozbalit Rozbalit vše Re: Python - konceni programu uzivatelem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak ja se omlouvam, ona nefunguje ani ta fce pokusna(). Cili bych rad preformuloval dotaz: jak zprovoznit a IF cyklem testovat klicova slova sloviku a volani z fci, ktere jsou lovnikem definovany?

Nechapu to, pri debuggingu vidim, ze do promenne msg se nacte retezec ve tvaru
'retezec'
, coz by melo stacit ke srovnani pomoci "in" a naslednemu pouziti prikazu COMMANDS['retezec']...
3.10.2012 06:39 Marek
Rozbalit Rozbalit vše Re: Python - konceni programu uzivatelem
Čau,

PV248, že? ;] Pan Sivak to ma rovnou ve slajdech. http://msivak.fedorapeople.org/python/01.html#(17)

řádky:

get a first word (cmd) from msg and test if it is a valid command (if cmd in COMMANDS:)

if yes: execute the corresponding function (ret = COMMANDS[cmd](rest_of_the_input)) and process the result ret (if is_done(ret):, if is_next(ret):)

Nesmis zapomenout tu hodnotu ze slovniku zavolat jako funkci (tj. dat za ni () ), jinak ti to jenom vrati objekt <function fce at 0xXXXXXXXXXXXXX> (XXX hex adresa)

tomes.io avatar 3.10.2012 10:12 tomes.io | skóre: 12 | blog: tomesh
Rozbalit Rozbalit vše Re: Python - konceni programu uzivatelem
Ano, PV248 ;)

Nesmis zapomenout tu hodnotu ze slovniku zavolat jako funkci (tj. dat za ni () )

Tohle jsem prehlid, ty zavorky. Jasne vono je to logicky :D Diky moc.
rADOn avatar 3.10.2012 15:55 rADOn | skóre: 44 | blog: bloK | Praha
Rozbalit Rozbalit vše Re: Python - konceni programu uzivatelem
Odpovědět | | Sbalit | Link | Blokovat | Admin
BTW ve standartní knihovně je na tohle už hotový modul cmd.
"2^24 comments ought to be enough for anyone" -- CmdrTaco

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.