일반적으로 파이썬으로 작성된 프로그램에서 키 입력을 받을 때는 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()
함수는 prompt
와 timeout
두 개의 매개변수를 가지고 있습니다. 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()
함수는 prompt
와 timeout
두 개의 매개변수를 가지고 있습니다. prompt
는 사용자에게 입력을 요구할 때 나타날 메시지를 나타내고, timeout
은 키 입력을 기다릴 최대 시간을 나타냅니다. 사용자가 입력을 완료하면 결과값이 반환되며, 시간 초과일 경우 None
이 반환됩니다.
마무리
이번 글에서는 파이썬에서 키 입력 시간을 제한하는 두 가지 방법에 대해 알아보았습니다. 각각 time
모듈과 threading
모듈, 그리고 time
모듈과 select
모듈을 활용하여 구현할 수 있습니다. 사용자에게 입력을 요구할 때 정해진 시간 내에 입력을 받기 위해 이러한 방법들을 적절히 사용하면 됩니다.
참고자료: