stdin: processing characters
Serge Orlov
Serge.Orlov at gmail.com
Mon May 1 08:32:57 EDT 2006
Kevin Simmons wrote:
> Thanks for your input. I found an answer that suits my needs, not curses
> :-), but stty settings and sys.stdin.read(n) :
>
> import os, sys
>
> while 1:
> os.system("stty -icanon min 1 time 0")
> print """
> Radio computer control program.
> ------------------------------
> Choose a function:
> po) Power toggle
> fq) Change frequency
> cm) Change mode
> vo) Change volume
> re) Reset
> qu) Quit
> -->""",
> func = sys.stdin.read(2)
> if func == "po":
> ...
> ... rest of menu actions ...
> elif func = "qu":
> os.system("stty cooked")
> sys.exit()
>
Looks reasonable if you don't need portability. But you may want to
refactor it a little bit to make sure terminal setting are always
restored:
try:
do_all_the_work()
finally:
os.system("stty cooked")
P.S. Maybe its me, but when I see call sys.exit() I always have a gut
feeling this function never returns. But in fact my I'm wrong and
sys.exit is more reasonable: it raises exception. So you can call
sys.exit() inside do_all_the_work and you can still be sure that
os.system("stty cooked") is always executed at the end.
More information about the Python-list
mailing list