2012-12-17 146 views
2

我有一個多處理的Python應用程序,它正在Windows上作爲EXE運行。在選擇關閉操作系統時,由於進程正在關閉,應用程序會拋出許多異常。Python處理系統關閉

有沒有辦法通過windows捕獲系統關閉請求,所以我可以自己處理多進程的關閉?

+0

什麼異常當「窗口」關閉時,應用程序是否會拋出? –

+0

它拋出異常與管道不可寫和io錯誤。基本上應用程序是多處理的,我認爲每個進程都在不同的時間得到關機命令,所以我需要處理關機命令,這樣我就可以做一些正常的終止。 –

+0

簽出python的'subprocess'模塊 – 2012-12-17 14:16:48

回答

5

一個nabble.com頁建議使用win32api.SetConsoleCtrlHandler

「我需要做的事情的時候窗戶關閉,當有人按下電源按鈕。我相信這是一個窗口消息,WM_QUERYENDSESSION或WM_ENDSESSION。我無法找到任何方式來蟒蛇這個陷阱。 atexit()不起作用。使用信號模塊來捕獲SIGBREAK或SIGTERM也不起作用。「
您可能可以使用win32api.SetConsoleCtrlHandler並捕獲發送到控制檯的CTRL_SHUTDOWN_EVENT。

另請參閱Python windows shutdown events,它說,「當使用win32api.setConsoleCtrlHandler()我能收到來自Windows關機/註銷/等活動,並徹底關閉我的應用」等