Терминал перестает отвечать на запросы - PullRequest
0 голосов
/ 29 июня 2018

После запуска этого скрипта:

def getVal():
    import sys,tty
    tty.setcbreak(sys.stdin)  
    key = ord(sys.stdin.read(1))
    while not (key == 97 or key == 100 or key == 115 or key == 100):
        print("Please enter w, a, s, or d only.")
        key = ord(sys.stdin.read(1))

    if key == 119:
        print("Up")
    elif key == 97:
        print("Left")
    elif key == 115:
        print("Down")
    elif key == 100:
        print("Right")
getVal()

Я пытаюсь запустить его снова в терминале, но все, что я пытаюсь сделать, не позволяет мне ничего вводить, и команда c или команда z не работает (я на Mac). Есть ли способ это исправить?

1 Ответ

0 голосов
/ 29 июня 2018

Ваш терминал не отвечает, потому что ваш код отключил эхо символа, но забыл включить его.

Я предлагаю вам сохранить атрибуты терминала и восстановить их после прочтения ключа:

import sys
import tty
import termios

def getVal():
    old = termios.tcgetattr(sys.stdin)
    tty.setcbreak(sys.stdin.fileno())
    try:
        key = ord(sys.stdin.read(1))
        while not (key == 97 or key == 100 or key == 115 or key == 119):
            print("Please enter w, a, s, or d only.")
            key = ord(sys.stdin.read(1))

        if key == 119:
            print("Up")
        elif key == 97:
            print("Left")
        elif key == 115:
            print("Down")
        elif key == 100:
            print("Right")
    finally:
        termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old)

getVal()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...