终端无响应

时间:2018-06-29 15:57:35

标签: python terminal

运行此脚本后:

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 :(得分:0)

您的终端不承担任何责任,因为您的代码已禁用字符回显,但忘记了重新启用它。

我建议您存储终端属性,并在读取密钥后恢复它们:

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()