[python] 파이썬에서 키 입력 시간 제한하기

일반적으로 파이썬으로 작성된 프로그램에서 키 입력을 받을 때는 input() 함수를 사용합니다. 그러나 때로는 사용자로부터 입력을 받을 때 제한된 시간 내에 입력을 받아야 하는 경우도 있습니다. 이번 글에서는 파이썬에서 키 입력을 받을 때 제한된 시간을 설정하는 방법에 대해 알아보겠습니다.

time 모듈과 threading 모듈을 활용한 시간 제한 구현

파이썬에서 시간 제한을 구현하기 위해서는 time 모듈과 threading 모듈을 함께 활용할 수 있습니다. time 모듈은 시간과 관련된 기능을 제공하고, threading 모듈은 별도의 스레드에서 작업을 수행할 수 있도록 도와줍니다.

아래는 input_timeout() 함수를 통해 키 입력 시간을 제한하는 예제 코드입니다.

import threading

def input_timeout(prompt, timeout):
    print(prompt)
    
    result = [None]
    
    def input_thread():
        result[0] = input()
        
    t = threading.Thread(target=input_thread)
    t.start()
    t.join(timeout)
    
    return result[0]

# 5초 내에 입력을 받을 수 있도록 함
user_input = input_timeout("5초 이내에 입력하세요: ", 5)

if user_input is None:
    print("시간이 초과되었습니다.")
else:
    print("입력값:", user_input)

위의 코드에서 input_timeout() 함수는 prompttimeout 두 개의 매개변수를 가지고 있습니다. prompt는 사용자에게 입력을 요구할 때 나타날 메시지를 나타내고, timeout은 키 입력을 기다릴 최대 시간을 나타냅니다. 사용자가 입력을 완료하면 결과값이 반환되며, 시간 초과일 경우 None이 반환됩니다.

time 모듈과 select 모듈을 활용한 시간 제한 구현

또 다른 방법으로는 time 모듈과 select 모듈을 함께 활용하여 시간 제한을 구현할 수도 있습니다. select 모듈은 여러 개의 입출력을 관찰하고, 그 중에서 어느 것이 준비되었는지 확인하는 기능을 제공합니다.

아래는 input_timeout() 함수를 통해 키 입력 시간을 제한하는 또 다른 예제 코드입니다.

import sys
import select

def input_timeout(prompt, timeout):
    print(prompt)
    
    i, o, e = select.select([sys.stdin], [], [], timeout)
    
    if i:
        return sys.stdin.readline().strip()
    else:
        return None

# 5초 내에 입력을 받을 수 있도록 함
user_input = input_timeout("5초 이내에 입력하세요: ", 5)

if user_input is None:
    print("시간이 초과되었습니다.")
else:
    print("입력값:", user_input)

위의 코드에서 input_timeout() 함수는 prompttimeout 두 개의 매개변수를 가지고 있습니다. prompt는 사용자에게 입력을 요구할 때 나타날 메시지를 나타내고, timeout은 키 입력을 기다릴 최대 시간을 나타냅니다. 사용자가 입력을 완료하면 결과값이 반환되며, 시간 초과일 경우 None이 반환됩니다.

마무리

이번 글에서는 파이썬에서 키 입력 시간을 제한하는 두 가지 방법에 대해 알아보았습니다. 각각 time 모듈과 threading 모듈, 그리고 time 모듈과 select 모듈을 활용하여 구현할 수 있습니다. 사용자에게 입력을 요구할 때 정해진 시간 내에 입력을 받기 위해 이러한 방법들을 적절히 사용하면 됩니다.

참고자료: