在python raw_input没有按下input
我在Python中使用raw_input
来与shell中的用户进行交互。
c = raw_input('Press s or n to continue:') if c.upper() == 'S': print 'YES'
它按预期工作,但用户必须在按下“s”后按下input框。 有没有办法来实现我所需要的用户input,而不需要在shell中按下input? 我正在使用* nixes机器。
在Windows下,你需要msvcrt
模块,具体来说,从你描述问题的方式来看,函数msvcrt.getch :
阅读按键并返回结果字符。 什么都没有回应到控制台。 如果按键不可用,此调用将被阻止,但不会等待按下Enter键。
(等 – 见我刚刚指出的文档)。 对于Unix来说,请参阅这个配方 ,以获得一个类似getch
函数的简单方法(另请参阅该配方的注释线程中的几个替代scheme&c)。
Python并不提供多平台解决scheme。
如果你在Windows上,你可以试试msvcrt :
import msvcrt print 'Press s or n to continue:\n' input_char = msvcrt.getch() if input_char.upper() == 'S': print 'YES'
而不是msvcrt
模块,你也可以使用WConio :
>>> import WConio >>> ans = WConio.getkey() >>> ans 'y'
诅咒也可以做到这一点:
import curses, time #-------------------------------------- def input_char(message): try: win = curses.initscr() win.addstr(0, 0, message) while True: ch = win.getch() if ch in range(32, 127): break time.sleep(0.05) except: raise finally: curses.endwin() return chr(ch) #-------------------------------------- c = input_char('Press s or n to continue:') if c.upper() == 'S': print 'YES'
在附注中,msvcrt.kbhit()返回一个布尔值,确定当前是否按下键盘上的任何按键。
所以如果你正在制作一个游戏或者某个东西,并且希望按键来做事情而不是完全停止游戏,那么你可以在if语句中使用kbhit()来确保只有当用户真的想要做某件事。
Python 3中的一个例子:
# this would be in some kind of check_input function if msvcrt.kbhit(): key = msvcrt.getch().decode("utf-8").lower() # getch() returns bytes data that we need to decode in order to read properly. i also forced lowercase which is optional but recommended if key == "w": # here 'w' is used as an example # do stuff elif key == "a": # do other stuff elif key == "j": # you get the point
为了获得单个字符,我使用了getch ,但是我不知道它是否可以在Windows上使用。