在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上使用。