在PyCharm 3.4.X控制台中运行脚本时,msvcrt getch()无反应

3 投票
2 回答
5449 浏览
提问于 2025-04-18 16:59

我有以下这段代码(在自己的文件/脚本/程序里):

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 在控制台窗口中也无法正常工作:

http://asciimatics.readthedocs.io/en/stable/troubleshooting.html#i-can-t-run-it-inside-pycharm-or-other-ides

如果你想在 PyCharm 编辑器中使用 msvcrt,一个可能的解决办法是“在输出控制台模拟终端”,这个选项可以在编辑运行/调试配置时找到。这个方法对我有效!

你也可以通过使用 tkinterpygame 切换到其他界面,这两者在 PyCharm 中都能正常工作。不过,这样会打开一个新窗口。

希望对 PyCharm 更了解的人能对此发表评论,甚至在那个项目中报告这个问题。特别是在不同平台之间,不阻塞的文本输入本来是个简单的事情,却让人很烦恼!真是让人生气!

撰写回答