gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:55:37 25 4
gpt4 key购买 nike

在 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 停止某些脚本,但 CTRL + BREAK 每次都能正常工作。 The Windows Docs有话要说:

The CTRL+C and CTRL+BREAK key combinations receive special handling by console processes. By default, when a console window has the keyboard focus, CTRL+C or CTRL+BREAK is treated as a signal (SIGINT or SIGBREAK) and not as keyboard input...

CTRL+BREAK is always treated as a signal, but an application can change the default CTRL+C behavior in two ways that prevent the handler functions from being called:

  1. The SetConsoleMode function can disable the ENABLE_PROCESSED_INPUT input mode for a console's input buffer, so CTRL+C is reported as keyboard input rather than as a signal.
  2. When SetConsoleCtrlHandler is called with NULL and TRUE values for its parameters, the calling process ignores CTRL+C signals. Normal CTRL+C processing is restored by calling SetConsoleCtrlHandler with NULL and FALSE values. This attribute of ignoring or not ignoring CTRL+C signals is inherited by child processes, but it can be enabled or disabled by any process without affecting existing processes.

因此,CTRL + C 似乎是一个 SIGINT,它的 Action 可以被您正在运行的程序修改。 Windows 上的 Python 似乎以 CTRL + C 被处理为键盘输入而不是我们期望的 SIGINT 的方式进行编码。对我来说幸运的是,我的键盘上有 CTRL + BREAK 键,每次都可以。

对于键盘上没有 BREAK 的用户,您可以使用 Windows 屏幕虚拟键盘。

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

stack thread如果 ctrl + ScrLk 在虚拟键盘上不起作用,您可以尝试一些其他方法。

关于python - 用于在 Powershell 中退出 Python 的 Ctrl-C 现在不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42039231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com