我如何一次获得一次按键?
对于Unix变种:有几种
解决方案。这很简单
这使用curses,但curses是一个
相当大的模块学习。这是一个
没有诅咒的解决方案:
import termios, fcntl, sys, os
fd = sys.stdin.fileno()
oldterm = termios.tcgetattr(fd)
newattr = termios.tcgetattr(fd)
newattr[3] = newattr[3] & ~termios.ICANON & ~termios.ECHO
termios.tcsetattr(fd, termios.TCSANOW, newattr)
oldflags = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags | os.O_NONBLOCK)
try:
while 1:
try:
c = sys.stdin.read(1)
print "Got character", `c`
except IOError: pass
finally:
termios.tcsetattr(fd, termios.TCSAFLUSH, oldterm)
fcntl.fcntl(fd, fcntl.F_SETFL, oldflags)
你需要termios和fcntl
任何这个工作的模块,和
我只是在Linux上试过它,尽管它
应该在别处工作在这段代码中,
字符被读取和打印一个
一段时间。
termios.tcsetattr()关闭stdin的
回显和禁用规范模式。
fcntl.fnctl()用于获取
stdin的文件描述符标志和
修改它们以进行非阻塞模式。
因为在空的时候读stdin
导致IOError,此错误是
抓住并忽略了。
使用此功能,您可以获取角色,检查它是否为数字,然后显示它。不过,我自己也没试过。