[Python-Dev] getch() in msvcrt does not accept extended characters.

Darryl Dixon esrever_otua at pythonhacker.is-a-geek.net
Tue Jul 5 23:58:07 CEST 2005


Sorry all,

    It seems that the list mods have finally released a duplicate
message that I wrote last week when I wasn't subscribed to the list.
Please ignore the message below if you have read the previous copy
already.

D


On Thu, 2005-06-30 at 09:43 +1200, Darryl Dixon wrote:
> Hi,
> 
>     I'm sorry, I don't seem to have done a very good job at explaining
> the situation.  I'll try again:
> 'getch()' is a low-level function provided on Windows to capture a
> single character of input from a user, /without echoing it to the
> screen/.  As far as I can tell there's no other way of doing this with
> Python on Windows.  The Python interface to this function is in the C
> code in msvcrtmodule.c, which has a (very thin) wrapper around the raw
> OS system call.  Microsoft provide a way of accepting both normal ASCII
> codes, and extended characters via this system call.  Currently, the
> Python wrapper in msvcrtmodule.c only supports the semantics of getting
> the bare ASCII codes, and not the extended characters.  I would strongly
> suggest that it should support both.
> 
> So, I guess in answer to the questions raised below;
> 
> 1) I can't do it in Python code without getch() (hence the original
> email)
> 
> 2) I would argue that in fact getch() is 'broken' in its current Python
> implementation, as it doesn't support what the OS implies /should/ be
> supported (and, indeed, if I input an extended character in response to
> a 'getch()' call, all I get back currently is an empty string).
> 
> Hope this helps,
> D
> 
> 
> Fredrik wrote:
> >Darryl Dixon wrote:
> >
> >> Microsoft support capturing extended characters via _getch, but it requires making a
> >> second call to getch() if one of the 'magic' returns is encountered in the first call (0x00
> >> or 0xE0).
> >
> >so why not do that in your python code?
> >
> >> The relevant chunk of code in Python that would probably need to be
> >> changed to support this appears to be in msvcrtmodule.c:
> >
> >if you change msvcrt, you'll break all the programs that uses getch() in
> >the prescribed way...
> >
> ></F> 
-- 
Darryl Dixon <esrever_otua at pythonhacker.is-a-geek.net>



More information about the Python-Dev mailing list