2015-02-09 203 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