2015-02-09 68 views
3

Quick Question:在调试python脚本时,PyCharm的停止按钮发送了什么信号/异常?如何捕捉PyCharm调试器的“停止按钮”?

背景:当使用PyCharm的调试器时,有几篇文章说明Ctrl-C不发送Keyboard Interrupt/SIGINT信号给python脚本。精细。我的问题是,当点击调试器的“停止按钮”时,确实会将发送到Python脚本。我想重写我的代码来捕捉任何信号/异常。 [我正在使用带有PyCharm 4.0.4的OSX]

+0

你为什么认为断点“发送中断”或“引发异常”? – alfasin 2015-02-09 19:30:26

+0

请参阅[停止操作不发送SIGINT](https://youtrack.jetbrains.com/issue/PY-13316)问题。 – 2015-02-13 09:40:32

回答

2

当您在调试过程后停止进程时,它会向解释器发送SIGKILL信号。

过程,退出代码137

退出代码以上128完成意味着它是一个128 +的信号的数目(在这种情况下,如图9所示,这是一个SIGKILL)。

您可以使用signal.signal()捕获SIGTERM,但SIGKILL不能被捕获。你无能为力。
那么,你可以设置一个独立的脚本来监视第一个脚本(例如,在正在运行的进程中检查它的PID存在),并在给定进程终止时执行一些操作。

+0

感谢您的回复。你正在运行什么版本的PyCharm?当我使用“运行”(或按^ R)运行代码时,实际上在单击“停止进程”按钮时会出现KeyboardInterrupt。当我使用“调试”(或按下^ D)运行代码时,当单击“停止进程”按钮时,我得不到KeyboardInterrupt并仅看到“处理以退出代码137完成”。 – Dutch 2015-02-10 21:30:17

+0

@Dutch我很抱歉,我使用Run(^ R)运行它。我已经更新了我的答案。 – 2015-02-10 21:40:21

+0

谢谢。这就是我所关心的事情 - 发生了一个不可触发的信号,我无法(很容易地)用它来触发我的代码的“清理”部分。感谢您的确认。 – Dutch 2015-02-12 19:40:42