运行此脚本后:
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上)。有什么办法解决吗?
答案 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()