web-dev-qa-db-ja.com

Pythonで矢印キーの値を見つける:なぜトリプルになるのですか?

ローカルシステムが矢印キーに割り当てる値、特にPythonを見つけようとしています。これを行うには、次のスクリプトを使用しています。

import sys,tty,termios
class _Getch:       
    def __call__(self):
            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

def get():
    inkey = _Getch()
    while(1):
            k=inkey()
            if k!='':break
    print 'you pressed', ord(k)

def main():
    for i in range(0,25):
        get()

if __name__=='__main__':
    main()

次に、スクリプトを実行し、上下左右を押すと、次の出力が得られました。

$ python getchar.py 
you pressed 27
you pressed 91
you pressed 65
you pressed 27
you pressed 91
you pressed 66
you pressed 27
you pressed 91
you pressed 67
you pressed 27
you pressed 91
you pressed 68

これは異常です。矢印キーを押すたびにget()の3つのインスタンスが使用されるため、矢印キーがトリプル(27-91-6x)の形でシステムに登録されていることが示唆されているためです。比較すると、a、b、cおよびCTRL-Cを押すと、次のようになります。

you pressed 97
you pressed 98
you pressed 99
you pressed 3

誰かが私の矢印キーの値がトリプルとして保存されているように見える理由を私に説明できますか?なぜそうなのですか?これはすべてのプラットフォームで同じですか? (私はDebian Linuxを使用しています。)そうでない場合、矢印キーの値を保存するにはどうすればよいですか?

ここでの最終目標は、矢印キーを正しく認識し、どの矢印キーが押されたかに応じて機能を実行する必要があるプログラムを作成することです。

26
Newb

私はMacを使用しており、次のコードを使用してうまく機能しました:矢印キーの値を0、1、2、3(上、下、左、右)として取得しました:ESCキーのコード27を常に覚えておくのが良いも。宜しくお願いします!

while True:
    key = cv2.waitKey(1) & 0xFF

    # if the 'ESC' key is pressed, Quit
    if key == 27:
        quit()
    if key == 0:
        print "up"
    Elif key == 1:
        print "down"
    Elif key == 2:
        print "left"
    Elif key == 3:
        print "right"
    # 255 is what the console returns when there is no key press...
    Elif key != 255:
        print(key)
4
Mauricio Alo