« Snow Leopard Guest User data loss bug | Main | A Dog's Consciousness »

October 17, 2009

Non-blocking raw_input for Python

I needed a way to allow a raw_input() call to time out. In case it's useful to anyone, I wrote this solution which works under Unix-like OS's.
import signal

class AlarmException(Exception):
    pass
    
def alarmHandler(signum, frame):
    raise AlarmException

def nonBockingRawInput(prompt='', timeout=20):
    signal.signal(signal.SIGALRM, alarmHandler)
    signal.alarm(timeout)
    try:
        text = raw_input(prompt)
        signal.alarm(0)
        return text
    except AlarmException:
        print 'Prompt timeout. Continuing...'
    signal.signal(signal.SIGALRM, signal.SIG_IGN)
    return ''

October 17, 2009 in Python, Web/Tech | Permalink

Comments

Post a comment