在python為什么我不能處理KeyboardInterrupt?
在Windows下使用python的subprocess.Popen創建子進程時,子進程如果是控制臺程序(子系統為console的程序),便會繼承父進程的控制臺窗口
當子進程在運行時,如果在控制臺使用Ctrl+C向父進程發送信號,這時會讓子進程先捕捉到這個信號,造成子進程的退出。父進程是在子進程之后捕捉到這個信號的(在python里會引發KeyboardInterrupt異常)。
如果這時父進程和子進程正在通信,父進程會得到子進程通信通道關閉的消息(比如TCP連接被對方強制關閉)
后來我在Popen的STARTUPINFO參數里加了CRATE_NEW_CONSOLE標志,以為這樣可以創建一個新的子窗口,以便父子進程分開捕獲Ctrl+C信號,不過還是不行,不知道這是Windows的bug還是subprocess模塊的bug還是系統機制本身就不允許這樣
目前的解決辦法是在子進程里正確處理Ctrl+C信號,以免發生意外情況