我有一個基於PyQt4的python 2.7應用程序。我需要在特定處理程序中處理Ctrl + C(KeyboardInterrupt
,SIGINT
,2)。我發現通過按Ctrl + C創建的異常未在try-except
塊中捕獲,並且在處理函數中沒有看到,由signal
庫註冊。 Ctrl + C什麼都不做!
我試圖做同樣沒有PyQt - signal
工程很好。
用於測試的代碼不使用任何PyQt API,因此我可以在兩種情況下使用它進行檢查。如何在python應用程序中使用PyQt處理Ctrl + C?
0
A
回答
1
CTRL + C導致信號被髮送到過程。 Python捕獲信號,並設置一個全局變量,如CTRL_C_PRESSED = True。然後,每當Python解釋器執行一個新的操作碼時,它就會看到變量集並引發一個KeybordInterrupt。
這意味着CTRL + C只有在Python解釋器正在旋轉時才起作用。如果解釋器正在執行用C語言編寫的擴展模塊來執行長時間運行的操作,CTRL + C將不會中斷它,除非它明確地與Python「協作」。例如:time.sleep()在理論上是一個阻塞操作,但該函數的實現與Python解釋器「協作」使CTRL + C工作。
這是全部設計:CTRL + C是爲了做一個「乾淨的中止」;這就是爲什麼它被Python變成一個異常(所以清理在堆棧展開期間執行),並且擴展模塊的支持有點「選入」。如果你想完全中止這個過程,而沒有給它一個清理的機會,你可以使用CTRL +。
當Python調用QApplication :: exec()(C++函數)時,Qt並不知道如何與Python進行「配合」來控制CTRL + C,這就是爲什麼它不起作用。我不認爲有一個好的方法來「讓它工作」;你可能想看看你是否可以通過全局事件過濾器來處理它。 - Giovanni Bajo
將此添加到主程序解決了問題。
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
我不確定這與解釋有什麼關係。
相關問題
- 1. Python:在pyqt應用程序中的多處理
- 2. Qt - Maemo應用程序 - 如何處理CTRL + C?
- 3. 如何在Windows應用程序中處理Ctrl + Break或Ctrl +暫停
- 4. 如何在Windows CE控制檯應用程序中處理Ctrl + C?
- 5. 如何在Haskell中編寫Ctrl-C處理程序?
- 6. 在PyQt應用程序中處理丟失的包或DLL
- 7. 在WinForm應用程序中處理Ctrl + Shift + A
- 8. CTRL-C處理程序無法正常
- 9. 與Web應用程序在Python處理
- 10. 如何從C++應用程序調用http處理程序?
- 11. 如何使用libreadline處理Ctrl-D
- 12. Threaded Python應用程序在Ctrl + C上沒有反應
- 13. Ctrl-C無法與PyQt配合使用
- 14. 如何使用pyqt處理html表單?
- 15. 使用poll()時正確處理Ctrl-C
- 16. 如何在CLI應用程序中「截取」Ctrl + C?
- 17. 如何使用Objective C處理關閉應用程序多任務處理?
- 18. 如何在JVM控制檯應用程序中處理^ C?
- 19. 如何使用GNU Readline處理Ctrl + D
- 20. 如何在Android應用程序中使用javamail處理multipart/alternative?
- 21. 如何在MVC應用程序中使用/處理加載器?
- 22. 如何處理使用GAE在django應用程序中加入?
- 23. 如何在iOS應用程序中使用多任務處理?
- 24. ZeroMQ:如何在Windows上處理Ctrl-C
- 25. 如何在Silverlight Web應用程序中實現Ctrl + C和Ctrl + V?
- 26. 如何使批處理文件運行python應用程序
- 27. 如何在一個事件處理程序中使用? Python
- 28. Mac OS X上的fsharpi問題:無法安裝ctrl-c處理程序 - Ctrl-C處理將不可用
- 29. 如何使用python發送ctrl a + c?
- 30. 如何在C中使用事件處理程序#
好吧,它可以讓我殺掉我的程序而無需處理。有可能處理Ctrl + C? – Jury
'進口signal' '進口sys' 'DEF signal_term_handler(信號,幀):'' 打印「得到SIGTERM'' 'sys.exit(0)' 'signal.signal(signal.SIGTERM, signal_term_handler)' –