raw_input and break
input/ldompeling at casema.nl
input/ldompeling at casema.nl
Thu Nov 5 07:59:40 EST 2015
In reply to "Peter Otten" who wrote the following:
> input/ldompeling at 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)
Thanks for the reply. Is there no easy way to do so in python ?
I am using the raspberry pi with Wheezy and for the robot the GoPiGo which is connected on the raspberry pi.
The GoPiGo board has his own code like: fwd()="forward" bwd()="backward" right()="right" left="left" and so on.
I am just a dummie with python.
Thanks
----------------------------------------------------------
> 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")
--
--------------------------------- --- -- -
Posted with NewsLeecher v7.0 Beta 2
Web @ http://www.newsleecher.com/?usenet
------------------- ----- ---- -- -
More information about the Python-list
mailing list