How to timeout when waiting for raw_input from user ?

northof40 shearichard at gmail.com
Sat Dec 5 05:01:33 EST 2009


On Dec 5, 2:44 pm, Maxim Khitrov <mkhit... at gmail.com> wrote:
> On Fri, Dec 4, 2009 at 6:55 PM, northof40 <shearich... at gmail.com> wrote:
> > On Dec 5, 12:52 pm, northof40 <shearich... at gmail.com> wrote:
> >> Hi - I'm writing a *very* simple program for my kids. It asks the user
> >> to give it the answer to a maths question and says "right" or "wrong"
>
> >> They now want a timed version where they would only get so long to
> >> respond to the question.
>
> >> I'm thinking of some logic where a raw_input call is executed and then
> >> if more than X seconds elapses before the prompt is replied to the
> >> process writes a message "Sorry too slow" (or similar).
>
> >> I can't see the wood for the trees here - what's the best way to do
> >> this given the rather simple environment it's needed within.
>
> >> Regards
>
> >> richard.
>
> > Sorry I should said that based upon other answers I've seen to similar
> > questions this needs to run on a windows machine (other answers
> > suggest this is more difficult than running on *nix)
>
> Simplest solution I could come up with. This is indeed much easier on
> *nix (just use select.select on sys.stdin with a timeout).
>
> ---
> from msvcrt import getch, kbhit, putch
> from time import sleep, time
>
> ans = ''
> end = time() + 5
>
> print('2 + 2 = ?')
>
> while True:
>         while time() < end:
>                 if kbhit():
>                         break
>                 else:
>                         sleep(0.001)
>         else:
>                 ans = None
>                 break
>
>         char = getch()
>         if char == '\r':
>                 print('')
>                 break
>         ans += char
>         putch(char)
>
> if ans is None:
>         print('\nSorry too slow')
> else:
>         try:
>                 print('right' if int(ans) == 4 else 'wrong')
>         except:
>                 print('not a number')
> ---
>
> - Max

That's really great - thanks. I've never looked at the whole msvcrt
module before - it looks like it could be useful ... at least for
windows programmes.

Thanks again.

R.




More information about the Python-list mailing list