在PyCharm3.4.X控制台中运行脚本时,msvcrtGetch()没有发生任何变化

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (531)

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

from msvcrt import getch

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

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

提问于
用户回答回答于

听起来可能是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
用户回答回答于

这对我来说也不起作用,即使在修复TypeError之后也没有使用martineau建议的代码(顺便说一下,在他拒绝的编辑中)。据我所知,PyCharm控制台在程序有机会读取之前消耗了输入。

在寻找其他无阻塞读取输入的解决方案时,我确信这是PyCharm的一个问题。例如,asciimatics已知在控制台窗口中不起作用:

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

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

你也可以使用tkinter或切换到不同的界面pygame,这两个界面都可以使用PyCharm。

扫码关注云+社区

领取腾讯云代金券