Python에서 사용자 입력에 대한 시간 제한을 구현하는 방법
raw_input() 함수를 활용하는 동안 원하는 상황이 발생할 수 있습니다. 미리 정의된 기간 후에 입력을 종료합니다. 다행스럽게도 Python은 이 요구 사항을 해결하기 위한 여러 솔루션을 제공합니다.
Unix 전용 방법:
@jer의 제안은 Unix에서만 사용할 수 있는 signal.alarm 함수를 활용합니다. 시스템. 이 함수는 지정된 시간 초과에 도달하면 KeyboardInterrupt 예외를 발생시킵니다. 다음 코드는 이러한 접근 방식을 예시합니다.
import signal def raw_input_with_timeout(prompt, timeout): signal.alarm(timeout) try: return input(prompt) except KeyboardInterrupt: return None finally: signal.alarm(0) # Reset alarm to avoid interference
교차 플랫폼 및 Windows 관련 방법:
교차 플랫폼 또는 Windows 관련 솔루션의 경우 다음을 사용하는 것이 좋습니다. thread.interrupt_main과 함께 threading.Timer 클래스. 이 접근 방식은 타이머 스레드에서 기본 스레드로 KeyboardInterrupt를 보냅니다. 아래 코드는 이 방법을 보여줍니다.
import threading def raw_input_with_timeout(prompt, timeout): print(prompt, end=' ') timer = threading.Timer(timeout, thread.interrupt_main) result = None try: timer.start() result = input(prompt) except KeyboardInterrupt: pass timer.cancel() return result
Windows 관련 방법(테스트되지 않음):
Windows 환경에서는 msvcrt를 사용하여 시간 초과를 달성할 수 있습니다. 이 접근 방식에는 긴밀한 루프 내에서 키 누르기를 폴링하고 최대 시간에 도달하거나 개행 문자가 감지될 때까지 입력을 누적하는 작업이 포함됩니다.
import msvcrt import time def raw_input_with_timeout(prompt, timeout): print(prompt, end=' ') finishat = time.time() + timeout result = [] while True: if msvcrt.kbhit(): result.append(msvcrt.getche()) if result[-1] == '\r': return ''.join(result) time.sleep(0.1) else: if time.time() > finishat: return None
사용자 정의 가능한 동작:
None 이외의 시간 초과 반환 값이 필요한 경우 위 코드 조각에서 return None 문을 바꾸면 됩니다. 또한 각 키 입력 후 종료를 조정하면 입력 속도에 따라 시간 초과를 조정할 수 있습니다.
위 내용은 Python에서 사용자 입력에 대한 시간 제한을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!