> 백엔드 개발 > 파이썬 튜토리얼 > Python\의 `raw_input()` 함수에서 사용자 입력에 대한 시간 제한을 어떻게 설정할 수 있나요?

Python\의 `raw_input()` 함수에서 사용자 입력에 대한 시간 제한을 어떻게 설정할 수 있나요?

Mary-Kate Olsen
풀어 주다: 2024-11-18 22:45:02
원래의
986명이 탐색했습니다.

How can you set a time limit on user input in Python's `raw_input()` function?

시간 제약 조건으로 원시 입력 사용자 정의

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿