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

python - 在 Ctrl-C 上删除 Python 中的回溯

Ctrl当你点击+时,有没有办法阻止回溯出现c,即KeyboardInterrupt在 Python 脚本中引发?

0 投票
1 回答
351 浏览

python - 在慢速系统调用中处理 SIGINT

我对 Python 很陌生,所以如果这个问题非常基本,请原谅我。

我正在尝试在使用选择模块从套接字接受数据时处理键盘中断。所以,我有一个 select.select() 函数调用来等待来自套接字的数据,然后将其输出到控制台。

按下 CTRL_C 时,似乎有时会出现 select.error,有时会出现 exceptions.IOError 异常。两种异常对应的错误代码均为 4。

有一些代码在调用堆栈中更深地处理 KeyboardInterrupt 异常,因此当我在接受套接字连接的函数中获得 SIGINT 时,我只想重新引发 KeyboardInterrupt 异常。我还想捕获与连接相关的异常。

检查异常的错误代码是否安全,如果它是 4 则引发 KeyboardInterrupt?这会影响我捕获与连接相关的异常的能力吗?有没有关于错误代码的好资源?

谢谢!

0 投票
1 回答
1007 浏览

c - 如何在不需要按 RET 的情况下要求输入 - C、Linux OS 中的键盘中断

我已经阅读了很多关于我要问的内容,但我发现最接近的是使用 ncurses 库。我正在做的是一个简单的 http 客户端,它将监视一些远程文件夹以检查其文件是否已更改或是否有新文件。此外,它必须检查一些命令的标准输入,所以,我打算使用父进程来监控标准输入和工作进程来监控远程目录。我想使用键盘中断之类的东西。就像安装一个信号处理程序来按下键盘一样,所以用户不必在每个命令后按 enter。

到目前为止,ncurses 可以满足我的需要,但我无法在 stdout 上打印东西,而是在 stdscr 中打印。问题是这个项目是大学的作业,很可能通过读取 mi 程序标准输出的脚本来检查......

那么,有什么建议吗?

相关的代码是:

当我运行我的程序时,如果我将输出重定向到一个文件,我会得到一个空文件

谢谢你的帮助!!!=)

0 投票
2 回答
30458 浏览

unix - Ctrl-C 和 SIGINT 有什么区别?

我一直在调试一个 Python 程序,该程序在收到KeyboardInterrupt异常后会出现段错误。这通常是通过Ctrl+C从外壳按下来完成的。为了测试特定的代码更改是否修复了这个错误,我有一个小的 shell 脚本,它SIGINT在启动后随机发送给程序。我遇到的问题是发送Ctrl+C似乎对程序的影响与发送信号不同SIGINT,因此不会导致错误出现,所以我很想知道这两个动作之间有什么区别。

该程序根本不会捕获任何键盘操作,只是一个带有一些线程/进程的 python 程序。它不安装信号处理程序(尽管 Python 会),并stty -a提供intr = ^C. 我怀疑它可能是Ctrl+C发送SIGINT到所有子进程/线程,而kill -INT只发送到主进程,但这就是我的怀疑。

这是发送kill -INT.

0 投票
1 回答
36703 浏览

python - python退出无限while循环,键盘中断异常

按下 Ctrl+C 时,我的 while 循环不会退出。它似乎忽略了我的 KeyboardInterrupt 异常。循环部分如下所示:

同样,我不确定问题出在哪里,但我的终端甚至从不打印我在异常中遇到的两个打印警报。有人可以帮我解决这个问题吗?

0 投票
3 回答
2565 浏览

python - 为什么我的线程/多处理 python 脚本没有正确退出?

我有一个服务器脚本,我需要能够干净地关闭它。在测试通常的try..except陈述时,我意识到这Ctrl-C不是通常的方式。通常我会像这样包装长时间运行的任务

所以任务可以干净地关闭Ctrl-C。我以前从未遇到过任何问题,但不知何故,当我遇到Ctrl-C这个特定脚本运行时,脚本只是退出而没有捕获Ctrl-C.

初始版本是使用Processfrom实现的multiprocessingThread我使用from重写了脚本threading,但同样的问题在那里。我以前用过threading很多次,但我是multiprocessing图书馆的新手。无论哪种方式,我以前从未经历过这种Ctrl-C行为。

通常我总是实现哨兵等以有序的方式关闭Queues和实例,但是这个脚本只是退出而没有任何响应。Thread

最后,我也尝试过signal.SIGINT像这样覆盖

这里Ctrl+C实际上被捕获了,但是处理程序没有执行,它从不打印任何东西。

除了threading/multiprocessing方面,部分脚本还包含C++ SWIG对象。我不知道这是否与它有关。我在 OS X Lion 上运行 Python 2.7.2。

所以,有几个问题:

  1. 这里发生了什么?
  2. 我该如何调试呢?
  3. 为了了解根本原因,我需要学习什么?

请注意:脚本的内部是专有的,所以我不能给出代码示例。然而,我非常愿意接收指针,所以我可以自己调试它。我有足够的经验,能够弄清楚是否有人能指出我正确的方向。

编辑:我开始注释掉导入等,看看是什么导致了奇怪的行为,我把它缩小到一个C++ SWIG库的导入。有什么想法为什么要导入C++ SWIG库“窃取” Ctrl-C?然而,我不是有罪图书馆的作者,我的 SWIG 经验有限,所以真的不知道从哪里开始......

编辑 2:我刚刚在 Windows 机器上尝试了相同的脚本,并且在 Windows 7 中Ctrl-C按预期捕获。我不会真的去打扰 OS X 部分,无论如何脚本都会在 Windows 环境中运行。

0 投票
1 回答
2324 浏览

python - tkinter 键盘中断在 tkinter 帧被提升之前不会被处理

我有一个用 python+tkinter 编写的 GUI 应用程序。在我的工作流程中,我通常从命令行启动 gui,在 gui 中做一些事情,然后我发现自己导航到其他终端窗口做一些工作。不可避免地,我想在某个时候关闭 GUI,出于习惯,我经常只是导航到启动 GUI 的终端并发送 KeyboardInterrupt (Ctrl-c)。但是,直到我在窗口管理器中启动 GUI 窗口后才会收到此中断。有谁知道为什么会这样?如果 gui 是在单个函数中启动的,是否有一个简单的解决方法——multiprocessing也许?

0 投票
1 回答
832 浏览

c - 在 C 中完成的 IDT 不起作用

我无法让 IDT 工作,因为我的中断例程没有被调用,尤其是当我按下键盘上的一个键时与键盘相关的例程。我正在传递 IDT 表的特殊 48 位指针地址。我正在这样做

我也不知道至少 GDT 是否在工作。

1)我应该怎么做才能让我的 IDT 工作。我也看过一些教程,但没有帮助 2) 我如何验证 GDT 是否正常工作?

提前致谢。

编辑:我正在为我自己的操作系统做这个。我怀疑我的汇编程序是否能够正确接收指针的地址。所以我也尝试使用内联汇编来做lidt,但没有帮助。我不知道出了什么问题。任何线索,想法?

}

}

0 投票
0 回答
300 浏览

operating-system - 如何验证 GDT 是否设置正确?

我的操作系统的 IDT 和 GDT 不能作为一个整体工作。我不知道其中哪一个设置不正确。那么我可以验证 GDT 是否设置正确,以便我能够找出问题所在。

我在 C 中这样做。

0 投票
1 回答
1813 浏览

python - 如何在使用 multiprocessing.Pool #python 时在 KeyboardInterrupt 上停止执行

可能重复:
键盘中断与 python 的多处理池

Python 的多处理模块有一个叫做 Pool http://docs.python.org/library/multiprocessing.html#module-multiprocessing.pool

当一个进程池正在运行时,我无法让脚本使用 KeyboardInterrupt 终止,即 Ctrl + c。池产生新进程,唯一退出的方法是 ctrl + z 然后手动杀死它们。

这是我尝试对其进行测试的脚本:

我的主脚本尝试做一些比 time.sleep() 更耗时的事情,每次我尝试测试运行它时,我都必须等待它完成或通过首先找到它的进程的 ID 手动终止它产生。请提出解决方法。