在PyCharm 3.4.X控制台中运行脚本时,msvcrt getch()无反应
我有以下这段代码(在自己的文件/脚本/程序里):
from msvcrt import getch
while True:
key = ord(getch())
print('You pressed', key)
我在PyCharm的控制台里运行了它,还按了各种键,包括字母键、数字键和方向键,但完全没有任何输出。
这是哪里出了问题,还是你需要我提供更多信息呢?
谢谢!
2 个回答
-1
听起来可能是PyCharm的控制台出了问题。
在操作系统的命令行控制台(cmd.exe)中,调用getch()
并不总是那么简单。这是我在自己代码中用过的一些方法。还有,评论里有个链接可以参考。
# see http://msdn.microsoft.com/en-us/library/078sfkak
import msvcrt
def readch(echo=True):
"Get a single character on Windows."
while msvcrt.kbhit(): # clear out keyboard buffer
ch = msvcrt.getch()
if ch in '\x00\xe0': # arrow or function key prefix?
ch = msvcrt.getch() # second call returns the actual key code
ch = msvcrt.getch()
if ch in '\x00\xe0': # arrow or function key prefix?
ch = msvcrt.getch() # second call returns the actual key code
if echo:
msvcrt.putch(ch)
return ch
注意:根据你的具体情况,可能不需要最开始的while
循环。
1
这对我也不管用,martineau 提出的代码在我修复了类型错误后也没用(顺便说一下,他拒绝了我的修改)。我觉得,PyCharm 的控制台在程序有机会读取输入之前就已经处理掉了这些输入。
我在寻找其他不阻塞的输入读取方法时,越来越相信这是 PyCharm 的问题。例如,asciimatics
在控制台窗口中也无法正常工作:
如果你想在 PyCharm 编辑器中使用 msvcrt
,一个可能的解决办法是“在输出控制台模拟终端”,这个选项可以在编辑运行/调试配置时找到。这个方法对我有效!
你也可以通过使用 tkinter
或 pygame
切换到其他界面,这两者在 PyCharm 中都能正常工作。不过,这样会打开一个新窗口。
希望对 PyCharm 更了解的人能对此发表评论,甚至在那个项目中报告这个问题。特别是在不同平台之间,不阻塞的文本输入本来是个简单的事情,却让人很烦恼!真是让人生气!