ホームページ >バックエンド開発 >Python チュートリアル >クロスプラットフォームでユーザー入力から 1 文字を読み取るにはどうすればよいですか?

クロスプラットフォームでユーザー入力から 1 文字を読み取るにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-21 05:10:15985ブラウズ

How Can I Read a Single Character from User Input Cross-Platform?

クロスプラットフォームでの単一文字入力の取得

ユーザーの入力から単一文字を読み取ることは、さまざまなシナリオで役立ちます。これを実現するには、次のクロスプラットフォーム ソリューションを利用できます:

ActiveState Recipes サイトでは、さまざまなオペレーティング システムを対象とした包括的なレシピが提供されています:

  • Windows :

    • msvcrt モジュールをインポートして使用しますmsvcrt.getch().
  • Linux および OSX:

    • tty を使用して標準入力を raw モードに設定します。 setraw() を使用してバッファリングを無効にします。
    • 使用して 1 文字を読み取ります。 sys.stdin.read(1).
    • 文字を読み取った後、元の設定を復元します。

提供されたコード スニペットは、この実装を示しています。

class _Getch:
    def __init__(self):
        try:
            self.impl = _GetchWindows()
        except ImportError:
            self.impl = _GetchUnix()

    def __call__(self): return self.impl()

class _GetchUnix:
    def __init__(self):
        import tty, sys

    def __call__(self):
        import sys, tty, termios
        fd = sys.stdin.fileno()
        old_settings = termios.tcgetattr(fd)
        try:
            tty.setraw(sys.stdin.fileno())
            ch = sys.stdin.read(1)
        finally:
            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
        return ch

class _GetchWindows:
    def __init__(self):
        import msvcrt

    def __call__(self):
        import msvcrt
        return msvcrt.getch()

getch = _Getch()

getch() を呼び出すだけで、バッファリングやエコーを行わずに単一の文字を取得できます。ターミナル。

以上がクロスプラットフォームでユーザー入力から 1 文字を読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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