在PyCharm 3.4.X控制台中运行脚本时,msvcrt getch()没有发生任何事情

时间:2014-08-12 12:05:22

标签: python pycharm msvcrt

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

from msvcrt import getch

while True:
    key = ord(getch())
    print('You pressed', key)

我在PyCharm的控制台中运行它并按下各种键,alpha,数字和箭头键,但根本没有输出。

有什么问题,或者您是否需要我提供更多信息?

谢谢!

2 个答案:

答案 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在控制台窗口中不起作用:

bokeh/issues/3349

如果您想将msvcrt与PyCharm编辑器一起使用,可能的解决方法是" 在输出控制台中模拟终端"可用于编辑运行/调试配置。这对我来说很成功!

您还可以使用tkinterpygame切换到其他界面,这两种界面都可以使用PyCharm。然而,这些打开了一个新窗口。

希望有更多了解PyCharm的人会对此发表评论,甚至可能在该项目中对其进行评论。特别是跨平台,非阻塞文本输入非常简单但很烦人!哎呀!