Welcome, guest | Sign In | My Account | Store | Cart
class _Getch:
   
"""Gets a single character from standard input.  Does not echo to the
screen."""

   
def __init__(self):
       
try:
           
self.impl = _GetchWindows()
       
except ImportError:
           
self.impl = _GetchUnix()

   
def __call__(self): return self.impl()


class _GetchUnix:
   
"""Fetch and character using the termios module."""
   
def __init__(self):
       
import tty, sys
       
from select import select

   
def __call__(self):
       
import sys, tty, termios
       
from select import select

        fd
= sys.stdin.fileno()
        old_settings
= termios.tcgetattr(fd)

       
try:
            tty
.setraw(sys.stdin.fileno())

           
# [ Wait until ready for reading,
           
#   wait until ready for writing
           
#   wait for an "exception condition" ]
           
# The below line times out after 1 second
           
# This can be changed to a floating-point value if necessary
           
[i, o, e] = select([sys.stdin.fileno()], [], [], 1)
           
if i:
                ch
= sys.stdin.read(1)
           
else:
                ch
= None

       
finally:
            termios
.tcsetattr(fd, termios.TCSADRAIN, old_settings)

       
return ch


class _GetchWindows:
   
"""Fetch a character using the Microsoft Visual C Runtime."""
   
def __init__(self):
       
import msvcrt

   
def __call__(self):
       
import msvcrt
       
import time

       
# Delay timeout to match UNIX behaviour
        time
.sleep(1)

       
# Check if there is a character waiting, otherwise this would block
       
if msvcrt.kbhit():
           
return msvcrt.getch()

       
else:
           
return


getch
= _Getch()

History