ホームページ > バックエンド開発 > Python チュートリアル > Python の `raw_input()` 関数でユーザー入力に時間制限を設定するにはどうすればよいでしょうか?

Python の `raw_input()` 関数でユーザー入力に時間制限を設定するにはどうすればよいでしょうか?

Mary-Kate Olsen
リリース: 2024-11-18 22:45:02
オリジナル
988 人が閲覧しました

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

時間制約を使用した生入力のカスタマイズ

Python では、raw_input() 関数は、ユーザーが何らかの形式の入力を提供するまでスクリプトの実行を一時停止します。ただし、スクリプトが無期限にハングしないように、この入力に時間制限を設定したい場合はどうすればよいでしょうか?

時間制限の実装

Unix ベースのシステムに適用できる 1 つのアプローチは、signal.alarm 関数を使用することです。秒単位の時間制限を指定してこの関数を呼び出すと、指定された期間が経過すると KeyboardInterrupt 例外が発生し、実質的に raw_input() 呼び出しがスキップされます。

クロスプラットフォーム ソリューション

クロスプラットフォームの互換性を確保するため、または Windows を使用している場合は、別の方法として、threading.Timer を thread.interrupt_main と組み合わせて利用することができます。 .

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
ログイン後にコピー

このアプローチでは、ユーザーが開始した入力とタイムアウトの両方が処理されることに注意してください。同様に、両方のシナリオで None を返します。これらのケースを区別する必要がある場合は、タイムアウトが発生したときにフラグを設定し、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート