问题标签 [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 投票
1 回答
199 浏览

python - 如何在 Python 中识别不可使用 CTRL +C 中断的代码的原因

我正在使用请求来提取一些文件。我注意到在从 5K 到 20K 的大量迭代之后,该程序似乎挂起。我可以说它挂了,因为存储结果的文件夹在几个小时内没有改变。我一直试图通过按 CTRL + C 来中断进程(我正在使用 IDLE),但无济于事。我想中断而不是终止进程,因为重新启动更容易。我终于不得不终止这个过程。我重新启动,它再次运行良好,直到我有相同的症状。我想弄清楚如何诊断问题,但由于我不得不杀死所有东西,所以我不知道从哪里开始。

是否有其他方法可以查看正在发生的事情或更有效地中断该过程?

我一直在假设,如果我可以在不杀戮的情况下中断,我可以查看全局变量,或者做一些其他的事情来弄清楚我的代码挂在哪里。

0 投票
2 回答
2212 浏览

mpi - mpirun 的自定义中断处理程序

显然,mpirun使用 SIGINT 处理程序将 SIGINT 信号“转发”到它产生的每个进程。

这意味着您可以为启用 mpi 的代码编写中断处理程序,执行mpirun -np 3 my-mpi-enabled-executable,然后将为三个进程中的每一个进程引发 SIGINT。不久之后,mpirun 退出。当您有一个仅打印错误消息然后退出的小型自定义处理程序时,这可以正常工作。但是,当您的自定义中断处理程序正在执行一项重要的工作(例如,进行严肃的计算或持久化数据)时,处理程序不会运行到完成。我假设这是因为 mpirun 决定过早退出。

这是执行后按下ctrl-c(即导致 SIGINT)时的标准错误my-mpi-enabled-executable。这是理想的预期行为:

这是ctrl-c执行后按下时的标准错误mpirun -np 1 my-mpi-enabled-executable。这是有问题的行为:

回答以下任何问题将解决我的问题:

  • 如何覆盖 mpirun SIGINT 处理程序(如果可能的话)?
  • 如何避免在 mpirun 终止后立即终止生成的进程 mpirun?
  • 在 mpirun 终止之前,mpirun 可能会向子进程发送另一个信号吗?
  • 有没有办法“捕获”所谓的“信号0(未知信号0)”(参见上面的第二个stderr)?

我在 Linux 上运行 openmpi-1.6.3。

0 投票
2 回答
2632 浏览

python - 将按钮释放视为键盘中断 tkinter

我在 Python 3 中使用 tkinter 创建一个程序,但我被卡住了......我有无限循环,由按下按钮触发:

如何在释放 button13 时终止 task13?是否有“键盘中断”代码或者我可以修改循环?

0 投票
0 回答
391 浏览

python - Python清理键盘中断

我有一个 python 脚本,我在其中使用线程来等待我的树莓派上的输入。这是我第一次使用线程,我在处理键盘中断时遇到了一些困难。这不是一个真正的问题,但如果用户提前按下 control-c,就像程序一启动,python 就会吓坏并喷出一个充满导入错误的控制台。我尝试将导入包装在 try - excepts 中,但这似乎不起作用。我感觉它与线程有关,因为我以前从未遇到过这个问题。

除了将所有内容包装在 try-excepts 中,我还尝试了:

我听说在加载之前不允许键盘中断?

反正有没有让python在键盘中断上做任何事情?

任何帮助,将不胜感激。谢谢!

我的代码:

0 投票
4 回答
3891 浏览

python - Cython, Python and KeyboardInterrupt ignored

Is there a way to interrupt (Ctrl+C) a Python script based on a loop that is embedded in a Cython extension?

I have the following python script:

This runs a loop that is part of a C++ Cython extension. Then, while pressing Ctrl+C, the KeyboardInterrupt is thrown but ignored, and the program keeps going until the end of the simulation.

The work around I found, is to handle the exception from within the extension by catching the SIGINT signal :

Then :

Can't I make this work from Python, or at least from Cython instead ? As I am about to port my extension under Windows/MinGW, I would appreciate to have something less Linux specific.

0 投票
2 回答
3578 浏览

python - 捕获键盘中断以阻止 Python 多处理工作人员处理队列

从 stackoverflow 上的几篇文章中,我创建了这段代码。

设想

我想要一个 multiprocessing.queue 几个工人“听”

在键盘中断的情况下,主进程不应再将新项目放入队列中,并且在哨兵对象的帮助下,工作人员应该优雅地停止。

问题

我使用的当前版本的问题

忽略 Ctrl + C 是它也被主进程忽略。

有任何想法吗 ?我需要使用多处理工作池吗?一些例子表明我可能不得不这样做。那么我还能使用队列吗?

0 投票
2 回答
19043 浏览

python - Python - 无法使用 KeyboardInterrupt 杀死主线程

我正在制作一个简单的多线程端口扫描器。它扫描主机上的所有端口并返回打开的端口。问题是中断扫描。完成扫描需要很长时间,有时我希望在扫描过程中使用 Cc 杀死程序。问题是扫描不会停止。主线程被锁定在 queue.join() 并且忽略了 KeyboardInterrupt,直到队列中的所有数据都被处理,从而解除阻塞主线程并优雅地退出程序。我所有的线程都被守护了,所以当主线程死时,他们应该和他一起死。

我尝试使用信号库,没有成功。覆盖 threading.Thread 类并添加优雅终止的方法不起作用......主线程在执行 queue.join() 时不会收到 KeyboardInterrupt

编辑:

我通过使用时间模块找到了解决方案。

0 投票
3 回答
8130 浏览

matlab - 在 Matlab 中,是否可以终止脚本,但将其所有内部变量保存到工作区?

我正在运行一个脚本,但它花费的时间太长,所以我想终止该脚本。然而,它计算了很多我不想丢弃的数据。是否有替代方法可以ctrl-C将内部函数变量保存到工作区?

理想情况下,我正在寻找类似的Matlab键盘快捷键ctrl-C,但如果真的无法做到,也许有一种方法可以在我的函数脚本中执行此操作。知道如何让我的脚本ctrl-C也做出反应,或者我可以取消一个 GUI 元素,然后我通过我的脚本保存变量?

我发现了一些类似的问题,但没有回答我的问题:

关闭/暂停

终止

不同的问题,相似的答案:

数据库停止

编辑:

这个问题是不同的,因为提问者的问题是不同的:他们想知道错误在哪里,在我的例子中,Matlab 已经说过了。我只想在它发生时将所有数据保留在工作内存中。

0 投票
1 回答
4198 浏览

python - Python主线程中断

谁能解释一下interrupt_main() 方法在Python 中是如何工作的?

我有这段 Python 代码:

当我尝试运行它时,它给了我以下输出:

但是,如果我手动中断程序(CTRL-C),线程被正确中断:

为什么在第一个示例中线程中断仅在 10 秒(而不是 5 秒)后发生?

我找到了一个古老的线程 n Python mailing list,但它几乎没有解释任何内容。

0 投票
1 回答
4072 浏览

python - Python 2.7:子线程未捕获 KeyboardInterrupt

在执行上面的代码时,当我按下 Ctrl-C 时,主线程在从它的 finally 子句打印后退出。现在,由于子线程是一个非守护进程,它仍然在 try: except KeyboardInterrupt 块中运行。然而,这个子线程似乎没有响应 Ctrl-C,即使它应该捕获 KeyboardInterrupt 异常。为什么?