Cameron Laird wrote: > In article <[EMAIL PROTECTED]>, > Edward Elliott <[EMAIL PROTECTED]> wrote: > >Kevin Simmons wrote: > >> I have a python script that prompts the user for input from stdin via a > >> menu. I want to process that input when the user types in two characters > >> and not have to have the user press <CR>. As a comparison, in the bash > >> shell one can use (read -n 2 -p "-->" CHOICE; case $CHOICE in...). Works > >> great and is very > > > >I did something like this a couple years ago, curses was the easiest way I > >found to do it. It's pretty painless with the wrapper function, which > >restores your terminal on error/exit. > > > > Kevin, the bad news is that curses() is as good as Python gets in > this regard. For better or worse, to the best of my knowledge, > unextended Python caNOT implement bash's read. Here's the closest > small approximation I know: > > import curses > import os > > msvcrt = curses.initscr() > msvcrt.addstr("-->") > first = msvcrt.getch() > second = msvcrt.getch() > os.system("stty echo -nl") > print "\nThe two characters are '%s' and '%s'." % (first, second) > > I hope someone proves me wrong.
I'm not sure what "unextended Python" means, but on POSIX platforms termios module can disable echo and command line option -u can disable buffering. I think there should be a way to disable buffering after program started. Probably fcntl module. -- http://mail.python.org/mailman/listinfo/python-list