getch.py
Go to the documentation of this file.
00001 # Copyright (c) 2013-2014, Rethink Robotics
00002 # All rights reserved.
00003 #
00004 # Redistribution and use in source and binary forms, with or without
00005 # modification, are permitted provided that the following conditions are met:
00006 #
00007 # 1. Redistributions of source code must retain the above copyright notice,
00008 #    this list of conditions and the following disclaimer.
00009 # 2. Redistributions in binary form must reproduce the above copyright
00010 #    notice, this list of conditions and the following disclaimer in the
00011 #    documentation and/or other materials provided with the distribution.
00012 # 3. Neither the name of the Rethink Robotics nor the names of its
00013 #    contributors may be used to endorse or promote products derived from
00014 #    this software without specific prior written permission.
00015 #
00016 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00017 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00018 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00019 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
00020 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00021 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00022 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00023 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00024 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00025 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00026 # POSSIBILITY OF SUCH DAMAGE.
00027 
00028 import sys
00029 import termios
00030 import tty
00031 from select import select
00032 
00033 
00034 def getch(timeout=0.01):
00035     """
00036     Retrieves a character from stdin.
00037 
00038     Returns None if no character is available within the timeout.
00039     Blocks if timeout < 0.
00040     """
00041     # If this is being piped to, ignore non-blocking functionality
00042     if not sys.stdin.isatty():
00043         return sys.stdin.read(1)
00044     fileno = sys.stdin.fileno()
00045     old_settings = termios.tcgetattr(fileno)
00046     ch = None
00047     try:
00048         tty.setraw(fileno)
00049         rlist = [fileno]
00050         if timeout >= 0:
00051             [rlist, _, _] = select(rlist, [], [], timeout)
00052         if fileno in rlist:
00053             ch = sys.stdin.read(1)
00054     except Exception as ex:
00055         print "getch", ex
00056         raise OSError
00057     finally:
00058         termios.tcsetattr(fileno, termios.TCSADRAIN, old_settings)
00059     return ch


baxter_examples
Author(s): Rethink Robotics Inc.
autogenerated on Fri Oct 3 2014 16:37:39