ホームページ  >  記事  >  バックエンド開発  >  「raw_input()」を使用して、Python で時間制限のあるユーザー入力を実装するにはどうすればよいですか?

「raw_input()」を使用して、Python で時間制限のあるユーザー入力を実装するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-19 16:35:02785ブラウズ

How to Implement Time-Limited User Input in Python Using `raw_input()`?

生入力による時間制限のあるユーザー入力

Python では、raw_input() 関数を使用してユーザーに入力を求めることができます。ただし、プログラムが無期限に停止するのを避けるために、ユーザー入力の待機時間を制限したい場合があります。

スレッド タイマーを使用した解決策

クロスの場合プラットフォームおよび Windows 固有のソリューションでは、スレッド モジュールの threading.Timer を利用できます。必要なモジュールをインポートします:

import thread
import threading

raw_input_with_timeout という関数を定義します:

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

この関数はプロンプトを出力し、タイマーを開始し、input を使用してユーザー入力を求めます。ユーザーが入力に指定されたタイムアウトよりも長い時間がかかると、タイマーがメイン スレッドを中断し、KeyboardInterrupt 例外が発生します。さらなる中断を防ぐために、タイマーはキャンセルされます。

入力がタイムアウトした場合は、None を返します。ユーザーがタイムアウト前に入力を行った場合、入力された文字列が返されます。

注:

  • タイムアウトとユーザーが開始した割り込み (例:ユーザーが Ctrl C) を押すと、タイムアウトによって割り込みが発生したかどうかを示す情報をグローバル変数に保存したり、try/Exception を使用して KeyboardInterrupt 例外を処理し、それに応じてフラグを設定したりできます。
  • これこのアプローチは、標準入力などの「通常のファイル」に対して Windows では機能しません。 Windows 固有の実装の場合は、タイムアウトを確認しながらループ内で msvcrt.kbhit と msvcrt.getche をポーリングすることを検討してください。

以上が「raw_input()」を使用して、Python で時間制限のあるユーザー入力を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。