input/ldompel...@casema.nl wrote: > > choices = raw_input("letter s to stop:") > > Oh no, this is not what I want. Now it is waiting for input when its go > further with the script. Because I have an while True: so I want that the > script go's continue only when I press a key then it must stop the script.
Solutions to that problem are OS-dependent. For Unix terminals https://docs.python.org/2/faq/library.html#how-do-i-get-a-single-keypress-at-a-time shows one way which I used to write the contextmanager below: $ cat capture_key.py import termios, fcntl, sys, os from contextlib import contextmanager @contextmanager def nonblocking(stdin=None): if stdin is None: stdin = sys.stdin fd = sys.stdin.fileno() oldterm = termios.tcgetattr(fd) newattr = termios.tcgetattr(fd) newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO termios.tcsetattr(fd, termios.TCSANOW, newattr) oldflags = fcntl.fcntl(fd, fcntl.F_GETFL) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK) def read(n): try: return stdin.read(n) except IOError: return "" try: yield read finally: termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm) fcntl.fcntl(fd, fcntl.F_SETFL, oldflags) Put the capture_key.py module into the same folder as your script and use it like in the demo below: from capture_key import nonblocking # put your code here with nonblocking() as read: print("letter s to stop:") while True: enable_servo() servo(90) mindist = 80 choices = read(1) if choices == 's': print("stop") break if mindist > us_dist(15): bwd() print("backward 1x") -- https://mail.python.org/mailman/listinfo/python-list