我有以下代码(在自己的文件/脚本/程序中):
from msvcrt import getch
while True:
key = ord(getch())
print('You pressed', key)
我在PyCharm的控制台中运行它并按下各种键,alpha,数字和箭头键,但根本没有输出。
有什么问题,或者您是否需要我提供更多信息?
谢谢!
答案 0 :(得分:-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 :(得分:-1)
这对我来说也不起作用,即使在修复TypeError之后也没有马丁诺的建议代码(顺便说一句,他拒绝了编辑)。据我所知,PyCharm控制台在程序有机会读取之前消耗了输入。
在寻找其他无阻塞读取输入的解决方案时,我确信这是PyCharm的一个问题。例如,已知asciimatics
在控制台窗口中不起作用:
如果您想将msvcrt
与PyCharm编辑器一起使用,可能的解决方法是" 在输出控制台中模拟终端"可用于编辑运行/调试配置。这对我来说很成功!
您还可以使用tkinter
或pygame
切换到其他界面,这两种界面都可以使用PyCharm。然而,这些打开了一个新窗口。
希望有更多了解PyCharm的人会对此发表评论,甚至可能在该项目中对其进行评论。特别是跨平台,非阻塞文本输入非常简单但很烦人!哎呀!