用于在 Powershell 中退出 Python 的 Ctrl-C 现在不起作用

obl*_*ong 9 python powershell exit

在 Powershell/命令提示符中使用 Ctrl-C 时,Python 无法退出,而是给出“KeyboardInterrupt”字符串。

最近我重新安装了 Windows 10。在重新安装之前 Ctrl-C 退出 python (3.5/2.7) 很好,没有输出。

有谁知道为什么会这样?是否只是一个简单的设置?

我能想到的唯一区别是我现在使用的是 python 3.6。Ctrl-D 在 Windows 上的 Ubuntu 上的 Bash 中工作,而 Ctrl-C 在激活的 anaconda python2 环境中工作正常以退出 python。

小智 15

我在 Windows 10 Pro Build 18363 和 Python 3.8.1 上遇到了这个问题。我正在运行一些 python 脚本,无法用 停止一些脚本CTRL + C,但CTRL + BREAK每次都工作。Windows Docs是这样说的:

CTRL+C 和 CTRL+BREAK 组合键由控制台进程进行特殊处理。默认情况下,当控制台窗口具有键盘焦点时,CTRL+C 或 CTRL+BREAK 被视为信号(SIGINT 或 SIGBREAK)而不是键盘输入...

CTRL+BREAK 始终被视为信号,但应用程序可以通过两种方式更改默认的 CTRL+C 行为,以防止调用处理程序函数:

  1. SetConsoleMode 函数可以禁用控制台输入缓冲区的 ENABLE_PROCESSED_INPUT 输入模式,因此 CTRL+C 报告为键盘输入而不是信号。
  2. 当 SetConsoleCtrlHandler 以其参数的 NULL 和 TRUE 值被调用时,调用过程会忽略 CTRL+C 信号。通过使用 NULL 和 FALSE 值调用 SetConsoleCtrlHandler 可以恢复正常的 CTRL+C 处理。这个忽略或不忽略 CTRL+C 信号的属性是由子进程继承的,但它可以被任何进程启用或禁用,而不会影响现有进程。

因此,CTRL + C似乎是一个 SIGINT 并且它的操作可以由您正在运行的程序修改。似乎 Windows 上的 Python 已经以一种CTRL + C被处理为键盘输入而不是我们期望的 SIGINT的方式进行编码。幸运的是,我的CTRL + BREAK键盘上有按键,而且每次都可以使用。

对于那些没有BREAK键盘的人,您可以使用 Windows On Screen 虚拟键盘。

  1. win key + r打开运行应用程序。
  2. 输入osk并按确定
  3. 在虚拟键盘上,按ctrl + ScrLk,这应该会终止程序。

如果在虚拟键盘上不起作用,此堆栈线程还有一些其他方法您可以尝试ctrl + ScrLk

  • 就我而言,我的笔记本电脑键盘上没有中断键。所以我使用 Ctrl +Fn + B (3认同)

小智 7

你可以输入

CTRL + Z, 
Run Code Online (Sandbox Code Playgroud)

然后按 ENTER 从 powershell 退出 python。

Powershell 截图


Dav*_*ton 4

这是最近出现在 Windows 10 Insider build 15002 中的一个错误。

解决方法是将映射键从 Ctrl C 更改为 Ctrl K 等

如果您不熟悉如何执行此操作,您可以查找或查看stty -a

您可以在每个 bash 会话上运行此命令,将您的 Terminate 映射到 Ctrl + K

stty intr \^k
Run Code Online (Sandbox Code Playgroud)

作为 TEMP 解决方案,您可以将其包含在 Bashrc 中,以便在每个新会话上执行它

此错误已在 Github 上报告#1569