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

时间:2016-09-26 22:34:14

标签: python keyboard spyder

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

2 个答案:

答案 0 :(得分:2)

msvcrt 在 Spyder 中不起作用的原因是 iPython 控制台嵌入在 Qt 小部件(源代码 here)中,该小部件处理键盘输入的方式与 CMD console 非常不同。

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

  1. 打开一个 CMD 窗口
  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. 点击最右侧的“浏览”按钮并选择“kernel-3436.json”(与 IPython 启动时打印的名称相同)。
  3. 如果代码如
import msvcrt
print('Press a key!')
key = msvcrt.getch()
print('You pressed:', key)

从 Spyder 运行,输出将出现在 Spyder 的 IPython 终端中。但是要提供输入,您必须将焦点设置到 CMD 窗口。

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

答案 1 :(得分:1)

在Spyder中设置此配置:

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

根据我的经验,“ msvcrt.kbhit”仅适用于CMD。