首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Powershell中退出Python的Ctrl-C现在不起作用

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

Stack Overflow用户
提问于 2017-02-04 18:24:35
回答 8查看 24K关注 0票数 10

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

最近我重新安装了Windows10。在重新安装之前,按Ctrl-C可以退出python (3.5/2.7),没有输出。

有人知道为什么会发生这种情况吗?是否只是一个简单的设置?

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2017-02-13 18:40:25

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

解决方法是将映射的键从Ctrl C更改为类似于Ctrl K的内容

如果您不熟悉如何做到这一点,您可以查看或stty -a

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

代码语言:javascript
运行
复制
stty intr \^k

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

此错误已在Github #1569上报告

票数 4
EN

Stack Overflow用户

发布于 2020-04-27 05:03:53

我在Windows10专业版18363和Python 3.8.1中遇到了这个问题。我正在运行一些python脚本,无法使用CTRL + C,但是CTRL + BREAK每次都有效Windows文档我是这么说的:

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

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

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

因此,CTRL + C似乎是一个SIGINT,它的动作可以被你正在运行的程序修改。Windows上的Python似乎以这样一种方式编码

被处理为键盘输入,而不是我们期望的SIGINT。对我来说幸运的是我有CTRL + BREAK键盘上的按键,每次都有效。

对于那些没有BREAK在键盘上,您可以使用Windows on Screen虚拟键盘。

  1. 按下win key + r打开运行应用程序。
  2. 类型osk然后按“确定”。

在虚拟键盘上,按ctrl + ScrLk这应该会杀死程序。

这个堆栈线程有一些其他方法可以尝试,如果在虚拟键盘上不工作。

票数 17
EN

Stack Overflow用户

发布于 2019-02-20 14:51:49

你可以输入

代码语言:javascript
运行
复制
CTRL + Z,

然后按ENTER从powershell退出python。

Powershell屏幕截图

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42039231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档