问题标签 [keyboardinterrupt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
126711 浏览

python - Capture keyboardinterrupt in Python without try-except

Is there some way in Python to capture KeyboardInterrupt event without putting all the code inside a try-except statement?

I want to cleanly exit without trace if user presses Ctrl+C.

0 投票
1 回答
422 浏览

console - Python:Windows 中的双键盘中断?

我正在 Python 3.1.2 中运行基于控制台的应用程序。我希望应用程序在提示符处捕获 Ctrl-C 并根据上下文进行处理。我按预期得到了 KeyboardInterrupt,但出乎意料的是,当我去写一条警告消息时,我有时会再次看到它。追溯如下。你们聪明人有什么想法吗?


0 投票
6 回答
40438 浏览

python - 为什么我不能在 python 中处理 KeyboardInterrupt?

我在 Windows 上编写 python 2.6.6 代码,如下所示:

dostuff()是一个永远循环的函数,从输入流中一次读取一行并对其进行操作。当我按下 ctrl-c 时,我希望能够停止它并进行清理。

相反,下面的代码except KeyboardInterrupt:根本没有运行。唯一被打印的是“清理...”,然后会打印如下所示的回溯:

因此,异常处理代码没有运行,并且回溯声称在 finally 子句期间发生了 KeyboardInterrupt ,这没有意义,因为点击 ctrl-c 是导致该部分首先运行的原因!甚至通用except:条款也没有运行。

编辑:根据评论,我try:用 sys.stdin.read() 替换了块的内容。问题仍然完全按照描述发生,finally:块的第一行运行,然后打印相同的回溯。

编辑#2: 如果我在读取后添加了很多东西,处理程序就会工作。所以,这失败了:

但这有效:

这是打印的内容:

所以,出于某种原因,“完成阅读”。行被打印,即使异常发生在前一行。这不是一个真正的问题——显然我必须能够在“try”块内的任何地方处理异常。但是,打印无法正常工作 - 之后它不会像预期的那样打印换行符!“Interrupted”打印在同一行......之前有一个空格,出于某种原因......?无论如何,在那之后代码会做它应该做的事情。

在我看来,这是在阻塞系统调用期间处理中断的错误。

0 投票
1 回答
1478 浏览

python - 我的 KeyboardInterrupt 仅在 90% 的时间内被捕获。我在什么方面失败了?

这是一些精简的代码,演示了我对线程的使用:

我有一个主线程,它从阻塞生成器获取数据。在实际代码中,此生成器会生成它通过套接字嗅出的与网络相关的数据。

然后我有一个日志记录、守护进程、线程,它将数据打印到屏幕上。

为了干净地退出程序,我正在捕获一个KeyboardInterrupt将设置一个exit_flag尝试的 - 这告诉主线程返回。

10 次中有 9 次,这将正常工作。程序将干净地退出。但是,有时我会收到以下两个错误:

错误一:

错误2:

我已经多次运行这个确切的示例代码,但无法复制错误。此代码与真实代码之间的唯一区别是example()生成器。就像我说的,这会从套接字产生网络数据。

你能看出我处理线程的方式有什么问题吗?

0 投票
2 回答
14679 浏览

python - 在 Windows 中使用子进程 Popen.send_signal(CTRL_C_EVENT) 时如何达到预期的效果?

根据文档,在 windows 中的 python 2.7 中,您可以发送 CTRL_C_EVENT (Python 2.7 Subprocess Popen.send_signal 文档)。 但是,当我尝试它时,我没有在子进程中收到预期的键盘中断。

这是父进程的示例代码:

这是子进程的示例代码:

如果我运行文件 parentProcess.py,我希望得到“Foo Bar”十次,然后是“KeyboardInterrupt”,然后是“Foo Bar”4 次,但我得到“Foo Bar”15 次。

有没有办法让 CTRL_C_EVENT 像 SIGINT 在 Linux 中一样充当键盘中断?

在做了一些阅读之后,我发现了一些似乎与关于 CTRL_C_EVENT 的 python 文档相矛盾的信息,特别是它说

CTRL_C_EVENT 0 生成 CTRL+C 信号。无法为进程组生成此信号

以下站点提供了有关创建标志的更多信息: 进程创建标志。

0 投票
5 回答
14371 浏览

python - Python:如何防止子进程接收 CTRL-C / Control-C / SIGINT

我目前正在为在 shell 中运行的专用服务器开发一个包装器。包装器通过子进程生成服务器进程,并观察其输出并对其做出反应。

必须明确地给专用服务器一个命令以正常关闭。因此,CTRL-C 不能到达服务器进程。

如果我在 python 中捕获 KeyboardInterrupt 异常或覆盖 SIGINT 处理程序,服务器进程仍会收到 CTRL-C 并立即停止。

所以我的问题是:如何防止子进程接收 CTRL-C / Control-C / SIGINT?

0 投票
1 回答
1422 浏览

python - 此线程 Spinner 类的更好的键盘中断检测

好的,我已经根据我在 Google 代码搜索中搜索到的一堆其他 Spinner 类编写了这个类。

它按预期工作,但我正在寻找一种更好的方法来处理 KeyboardInterrupt 和 SystemExit 异常。有更好的方法吗?

这是我的代码:

先感谢您。

0 投票
1 回答
767 浏览

python - Python 键盘中断按钮

我正在使用 red hat 5 linux,我想知道在 python 2.6 中什么组合键会引发 KeyboardInterrupt 异常。我知道是windows下的Ctrl+c。

问候,

0 投票
1 回答
969 浏览

python - 在 ipython 下的 Python 2.7 中,KeyboardInterrupt 不可预测,我怎样才能让它*总是*中止当前评估?

我正在编写 python 代码来进行数值分析,并且我一直在使用 ipython 或 ipython -pylab 作为我的命令行界面。我经常遇到一些代码正在运行的情况,我需要停止它。但是,Ctrl-C 是有问题的;有时它可以工作,有时它什么也不做,有时它会退出整个过程(非常烦人。)我怎样才能让它总是按Ctrl-C ?似乎它不起作用的时间是它在其他模块中执行代码的时间。

非常感谢。

0 投票
4 回答
600 浏览

python - Can't kill my python code. What's wrong?

Okay, so I'm writing a very simplistic password cracker in python that brute forces a password with alphanumeric characters. Currently this code only supports 1 character passwords and a password file with a md5 hashed password inside. It will eventually include the option to specify your own character limits (how many characters the cracker tries until it fails). Right now I cannot kill this code when I want it to die. I have included a try and except snippit, however it's not working. What did I do wrong?

Code: http://pastebin.com/MkJGmmDU