3

我有一个用 Python(Linux 上的 2.7.3 版)编写的小程序,它在循环中对多个文件运行外部命令。它使用它执行此操作subprocess.check_output,然后将输出中的数据写入 Sqlite3 数据库。我有两个问题:

  1. 当我Ctrl+C停止程序时,所发生的只是正在执行的子进程被杀死,主程序继续下一次迭代并启动下一个子进程。

  2. 如果我从另一个窗口强制杀死它,kill -9它会退出,但数据库文件不包含任何更改。

我已经阅读了几个小时并尝试了各种东西,包括信号处理程序,try/finally等等。到目前为止,我一直无法做应该很简单的事情。

那么,如何让 Python 程序接受 aCtrl+C并干净地终止,以便其子进程结束并正确保存其 sqlite3 数据库?

(只是补充一点,如果程序要运行完成,它确实会干净地退出并且数据库文件会按预期更新)

4

2 回答 2

0

这里有一个很好的关于理解杀死子进程的讨论/资源:Ctrl-C 如何终止子进程?

sql 问题(没有更多信息)听起来像是在您不成熟地终止进程时中断了提交数据的进程

于 2013-05-17T15:52:30.913 回答
0

我记得,您可以检查是否Ctrl-C使用 try/except:

try:
    #code here...
except KeyboardInterrupt:
    #cleanup code...

我在开发过程中一直这样做,以便在发现问题时可以完全停止。

于 2017-07-11T05:40:43.547 回答