title: Finding the Values of the Arrow Keys in Python: Why are they triples?
body: <p>I am trying to find the values that my local system assigns to the arrow keys, specifically in Python. I am using the following script to do this:</p>
  
  <pre><code>import sys,tty,termios
  class _Getch:       
      def __call__(self):
              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 ch
  
  def get():
      inkey = _Getch()
      while(1):
              k=inkey()
              if k!='':break
      print 'you pressed', ord(k)
  
  def main():
      for i in range(0,25):
          get()
  
  if __name__=='__main__':
      main()
  </code></pre>
  
  <p>Then I ran the script, and hit UP DOWN RIGHT LEFT, which gave me this output:</p>
  
  <pre><code>$ python getchar.py 
  you pressed 27
  you pressed 91
  you pressed 65
  you pressed 27
  you pressed 91
  you pressed 66
  you pressed 27
  you pressed 91
  you pressed 67
  you pressed 27
  you pressed 91
  you pressed 68
  </code></pre>
  
  <p>This is anomalous because it suggests that the arrow keys are registered as some form of triple (27-91-6x) on my system, as each press of an arrow key takes up three instances of get(). By comparison, pressing a,b,c and CTRL-C gives:</p>
  
  <pre><code>you pressed 97
  you pressed 98
  you pressed 99
  you pressed 3
  </code></pre>
  
  <p>Can anyone explain to me why the values of my arrow-keys seem to be stored as triples? Why is this is so? Is this the same across all platforms? (I'm using Debian Linux.) If not, how should I go about storing the values of the arrow-keys?</p>
  
  <p>The end goal here is in that I'm trying to write a program which needs to correctly recognize arrow-keys and perform a function depending on which arrow-key was pressed.</p>