Python에서 사용자 입력에 대한 시간 제한을 구현하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-16 17:42:03
원래의
869명이 탐색했습니다.

How to Implement a Time Limit for User Input in Python?

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

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