python中获取按键(跨平台),python获取按键,[Python]代码Py


[Python]代码

Python语言: python中获取按键(跨平台) #from: http://www.douban.com/note/15404915/#张沈鹏整理自 http://code.activestate.com/recipes/134892/class _Getch:    """Gets a single character from standard input.  Does not echo to the screen."""    def __init__(self):        try:            self.impl = _GetchWindows()        except ImportError:            try:                self.impl = _GetchMacCarbon()            except AttributeError:                self.impl = _GetchUnix()    def __call__(self): return self.impl()class _GetchUnix:    def __init__(self):        import tty, sys, termios # import termios now or else you'll get the Unix version on the Mac    def __call__(self):        import sys, tty, termios        fd = sys.stdin.fileno()        old_settings = termios.tcgetattr(fd)        try:            tty.setraw(sys.stdin.fileno())            ch = sys.stdin.read(1)        finally:            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)        return chclass _GetchWindows:    def __init__(self):        import msvcrt    def __call__(self):        import msvcrt        return msvcrt.getch()class _GetchMacCarbon:    """    A function which returns the current ASCII key that is down;    if no ASCII key is down, the null string is returned.  The    page http://www.mactech.com/macintosh-c/chap02-1.html was    very helpful in figuring out how to do this.    """    def __init__(self):        import Carbon        Carbon.Evt #see if it has this (in Unix, it doesn't)    def __call__(self):        import Carbon        if Carbon.Evt.EventAvail(0x0008)[0]==0: # 0x0008 is the keyDownMask            return ''        else:            #            # The event contains the following info:            # (what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1]            #            # The message (msg) contains the ASCII char which is            # extracted with the 0x000000FF charCodeMask; this            # number is converted to an ASCII character with chr() and            # returned            #            (what,msg,when,where,mod)=Carbon.Evt.GetNextEvent(0x0008)[1]            return chr(msg & 0x000000FF)if __name__ == '__main__': # a little test   print 'Press a key'   inkey = _Getch()   import sys   for i in xrange(sys.maxint):      k=inkey()      if k <> '': break   print 'you pressed ',k

评论关闭