如何让kbhit()在Spyder环境下工作

How to make kbhit() work in the Spyder environment

有没有人在 Windows 上找到在 Spyder 环境中模拟 kbhit() 的方法?不知何故,开发环境介于 Python 程序和键盘之间,因此任何简单的方法(即 msvcrt.kbhit())都不起作用。

在 Spyder 中设置此配置:

运行 > 运行 每个文件的配置 > 在外部系统终端中执行

根据我的经验"msvcrt.kbhit" 仅适用于 CMD。

msvcrt 在 Spyder 中不起作用的原因是 iPython 控制台嵌入在 Qt 小部件中(源代码 here) which handles keyboard input very differently than the CMD console

Mehdi 的上述回答是最实用的解决方法。但是,也可以将 Spyder 连接到外部 IPython 控制台,该控制台 运行 在 CMD 终端内:

  1. 打开 CMD window
  2. 从 运行 宁 ipython kernel 开始 IPython。它应该打印类似
cmd> ipython kernel
NOTE: When using the `ipython kernel` entry point, Ctrl-C will not work.

To exit, you will have to explicitly quit this process, by either sending
"quit" from a client, or using Ctrl-\ in UNIX-like environments.

To read more about this, see https://github.com/ipython/ipython/issues/2049


To connect another client to this kernel, use:
    --existing kernel-3436.json
  1. 打开 Spyder 并使用“控制台 > 连接到现有内核”连接到 IPython 内核。这将打开一个对话框,要求提供连接文件。
  2. 单击最右侧的“浏览”按钮,然后select“kernel-3436.json”(与IPython启动时打印的名称相同)。
  3. 如果代码如
import msvcrt
print('Press a key!')
key = msvcrt.getch()
print('You pressed:', key)

是来自Spyder的运行,输出将出现在Spyder的IPython终端。但是要提供输入,您必须将焦点设置到 CMD window.

甚至可以 运行 调试器,但对外部内核的支持似乎非常有限。没有 GUI 集成。相反,PDB 命令必须直接输入 Spyder IPython 终端。根据 2013 年的 this issue,这不太可能改变。