Python에서 raw_input() 함수는 사용자가 어떤 형태의 입력을 제공할 때까지 스크립트 실행을 일시 중지합니다. 그러나 스크립트가 무기한 중단되는 것을 방지하기 위해 이 입력에 시간 제한을 설정하려면 어떻게 해야 합니까?
시간 제한 구현
Unix 기반 시스템에 적용할 수 있는 한 가지 접근 방식은 signal.alarm 기능을 사용하는 것입니다. 초 단위의 시간 제한으로 호출되면 이 함수는 지정된 기간 후에 KeyboardInterrupt 예외를 발생시켜 raw_input() 호출을 효과적으로 건너뜁니다.
교차 플랫폼 솔루션
교차 플랫폼 호환성을 위해 또는 Windows를 사용하는 경우 대체 방법은 thread.interrupt_main과 함께 threading.Timer를 활용하는 것입니다. .
import thread import threading def raw_input_with_timeout(prompt, timeout=30.0): print(prompt, end=' ') timer = threading.Timer(timeout, thread.interrupt_main) astring = None try: timer.start() astring = input(prompt) except KeyboardInterrupt: pass timer.cancel() return astring
이 접근 방식은 사용자가 시작한 입력과 시간 초과를 모두 동일하게 처리하며 두 시나리오 모두에 대해 없음을 반환합니다. 이러한 경우를 구별해야 하는 경우 시간 초과가 발생할 때 플래그를 설정하고 KeyboardInterrupt 처리기에서 별도로 처리하도록 코드를 수정할 수 있습니다.
Windows 관련 구현
Windows 관련 솔루션의 경우 msvcrt.kbhit를 폴링하는 루프를 활용하여 사용자 입력을 확인하는 동시에 작업 시간을 모니터링할 수 있습니다. 시간 초과가 적용되는지 확인하세요.
import msvcrt import time def raw_input_with_timeout(prompt, timeout=30.0): 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이 반환되지 않도록 하려면 코드를 수정하여 이러한 경우 대체 기본값이 반환됩니다.
고급 사용자 정의
단순히 천천히 입력하는 사용자에게 시간 제한이 적용되는 것을 방지하기 위해 각 문자 입력 후 시간 초과를 다시 계산하여 타이머만 작동하도록 할 수 있습니다. 입력이 장기간 동안 실제로 일시 중지되면 만료됩니다.
위 내용은 Python의 `raw_input()` 함수에서 사용자 입력에 대한 시간 제한을 어떻게 설정할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!