stdin: processing characters

Serge Orlov Serge.Orlov at gmail.com
Sun Apr 30 15:03:21 EDT 2006


Cameron Laird wrote:
> In article <2Bd4g.21380$tN3.16246 at newssvr27.news.prodigy.net>,
> Edward Elliott  <nobody at 127.0.0.1> 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.




More information about the Python-list mailing list