【发布时间】:2013-05-12 18:13:25
【问题描述】:
我有一个用 Python(Linux 上的版本 2.7.3)编写的小程序,它在循环中对多个文件运行外部命令。它使用subprocess.check_output 执行此操作,然后将输出中的数据写入 Sqlite3 数据库。我有两个问题:
当我点击
Ctrl+C停止程序时,所发生的只是正在执行的子进程被终止,主程序继续下一次迭代并启动下一个子进程。如果我从另一个窗口用
kill -9强制杀死它,它会退出,但数据库文件不包含任何更改。
我已经阅读了几个小时并尝试了各种事情,包括信号处理程序、try/finally 等等。到目前为止,我一直无法做应该很简单的事情。
那么,如何让 Python 程序接受 Ctrl+C 并干净地终止,以便其子进程结束并正确保存其 sqlite3 数据库?
(只是补充一点,如果让程序运行到完成,它确实会干净地退出并且数据库文件会按预期更新)
【问题讨论】:
-
我在程序中添加了手动提交,现在至少在杀死程序后数据库是最新的。现在我只需要弄清楚如何干净地处理
Ctrl+C。 -
你的parent process should die with
KeyboardInterruptexception。您能否提供一个完整的最小代码示例来说明问题? -
抱歉延迟回复。我将程序剥离为基础,它没有表现出问题,所以我将在这里做更多的调查。
标签: sqlite subprocess python-2.x