How to timeout when waiting for raw_input from user ?
Maxim Khitrov
mkhitrov at gmail.com
Fri Dec 4 20:44:45 EST 2009
On Fri, Dec 4, 2009 at 6:55 PM, northof40 <shearichard 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
More information about the Python-list
mailing list