【问题标题】:PyCharm: msvcrt.kbhit() and msvcrt.getch() not working?PyCharm:msvcrt.kbhit() 和 msvcrt.getch() 不起作用?
【发布时间】:2015-08-12 14:15:20
【问题描述】:

我尝试从 PyCharm 的控制台读取一个字符(不按 Enter),但无济于事。 函数msvcrt.getch() 停止代码,但不响应按键(甚至输入),msvcrt.kbhit() 始终返回 0。例如,此代码不打印:

import msvcrt
while 1:
    if msvcrt.kbhit():
        print 'reading'
print 'done'

我使用的是 Windows 7,PyCharm 3.4(空闲时也是如此)。

怎么了?有没有其他方法可以直接读取输入而不输入?

【问题讨论】:

  • 这里有同样的问题。似乎没有任何方法可以在运行控制台中捕获按键。我真的希望有人解决这个问题。
  • 同样,key = msvcrt.getch() 在 PyCharm 5.0.4 中不起作用。
  • 我要求在 intellij 跟踪器上解决这个问题。如果你也想要它,你可以在这里投票:youtrack.jetbrains.com/issue/PY-21240
  • @VitBernatik 我似乎也遇到了同样的问题。有什么解决办法吗?

标签: python pycharm msvcrt getch kbhit


【解决方案1】:

Run 窗口的特殊模式下是可能的。

  • 选中Run/Debug Configurations 中的Emulate terminal in output console 设置复选框

【讨论】:

  • 它仍然没有帮助。即使在我检查了模拟终端复选框之后,我仍然在 pycharm 中的 kbhit 中始终为 false,在常规控制台中为 true(如果我按下任何键)。
【解决方案2】:

您正在尝试将 <Class 'Bytes'><Class 'string'> 进行比较。

key 转换为string,然后进行比较:

import msvcrt

while True:
    if msvcrt.kbhit():
        key = str(msvcrt.getch())
        if key == "b'w'":
            print(key)

要在命令行中运行程序,请转到:编辑配置 > 执行 > 启用 “在输出控制台中模拟终端”

【讨论】:

    【解决方案3】:

    此代码将修复。所以使用key.lower()

    while True:
        key = msvcrt.getch()
        if key == "b'w'":
            print("Pressed: W without lower()")
            #It won't work.
        if key.lower() == "b'w'":
            print("Pressed: W with lower()")
            #This one will work.
    #I don't know why but key.lower() works.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多