在 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。
我在 Windows 10 Pro Build 18363 和 Python 3.8.1 中遇到了这个问题。我正在运行一些 python 脚本,但无法停止一些脚本CTRL + C
, but CTRL + BREAK
每次都工作。Windows 文档 https://learn.microsoft.com/en-us/windows/console/ctrl-c-and-ctrl-break-signals有这样说:
CTRL+C 和 CTRL+BREAK 组合键由控制台进程进行特殊处理。默认情况下,当控制台窗口具有键盘焦点时,CTRL+C 或 CTRL+BREAK 被视为信号(SIGINT 或 SIGBREAK),而不是键盘输入...
CTRL+BREAK 始终被视为信号,但应用程序可以通过两种方式更改默认的 CTRL+C 行为,以防止调用处理程序函数:
- SetConsoleMode 函数可以禁用控制台输入缓冲区的 ENABLE_PROCESSED_INPUT 输入模式,因此 CTRL+C 被报告为键盘输入而不是信号。
- 当使用 NULL 和 TRUE 参数值调用 SetConsoleCtrlHandler 时,调用进程会忽略 CTRL+C 信号。通过使用 NULL 和 FALSE 值调用 SetConsoleCtrlHandler 可以恢复正常的 CTRL+C 处理。忽略或不忽略 CTRL+C 信号的这个属性由子进程继承,但它可以由任何进程启用或禁用,而不影响现有进程。
Thus, CTRL + C
似乎是一个 SIGINT,它的操作可以由您正在运行的程序修改。 Windows 上的 Python 似乎是这样编码的:CTRL + C
正在被处理为键盘输入而不是我们期望的 SIGINT。对我来说幸运的是我有CTRL + BREAK
我键盘上的按键每次都有效。
对于那些没有的人BREAK
在键盘上,您可以使用 Windows 屏幕虚拟键盘。
- Press
win key + r
打开运行的应用程序。
- Type
osk
然后按确定
- 在虚拟键盘上,按
ctrl + ScrLk
这应该会终止该程序。
This 堆栈线程 https://stackoverflow.com/questions/10114447/excel-vba-break-execution-when-theres-no-break-key-on-keyboard还有一些其他方法你可以尝试ctrl + ScrLk
不适用于虚拟键盘。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)