我有一個用Python編寫的程序(Linux版本2.7.3),它在循環中的許多文件上運行一個外部命令。它使用subprocess.check_output
執行此操作,然後將輸出中的數據寫入Sqlite3數據庫。我有2個問題:當它運行一個子進程時,在Ctrl + C上終止Python程序
當我打
Ctrl+C
停止程序,所發生的一切是執行子被殺害,並且主程序只是下一次迭代繼續並啓動下一子。如果我強制殺死它從另一個窗口
kill -9
它會退出,但數據庫文件不包含任何更改。
我一直在閱讀了幾個小時,並嘗試不同的東西,包括信號處理,try
/finally
等上。到目前爲止,我一直無法做到應該很簡單的事情。
那麼,如何讓Python程序接受Ctrl+C
並乾淨地終止,以便其子進程結束並且其sqlite3數據庫已正確保存?
(只是補充說,如果程序是留給運行到完成,它退出乾淨,預期數據庫文件被更新)
我在程序中添加了手動提交,現在至少數據庫在殺死程序後是最新的。現在我只需要弄清楚如何幹淨地處理'Ctrl + C'。 – starfry
你的[父進程應該死於'KeyboardInterrupt'異常](https://gist.github.com/e2804f0934b505946b99)。你能否提供一個完整的最小代碼示例來顯示問題? – jfs
對於延遲迴復感到抱歉。我將該程序剝離出來,並沒有出現問題,所以我打算在這裏做更多的調查。 – starfry