在运行子进程时,在Ctrl + C上终止Python程序

时间:2013-05-17 14:20:13

标签: sqlite subprocess python-2.x

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

  1. 当我点击Ctrl+C停止程序时,所有发生的事情都是执行的子进程被终止,主程序继续下一次迭代并启动下一个子进程。

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

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

    那么,我怎样才能让Python程序接受Ctrl+C并彻底终止,以便其子进程结束并正确保存其sqlite3数据库?

    (只是添加它,如果程序保持运行完成,它会干净地退出并且数据库文件会按预期更新)

2 个答案:

答案 0 :(得分:0)

在此处有一个非常好的讨论/资源来理解杀死子进程:How does Ctrl-C terminate a child process?

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

答案 1 :(得分:0)

我记得,您可以使用try / except检查Route::post('events/{id}', EventsController@destroy)

Ctrl-C

我在开发期间一直这样做,这样如果发现错误,我就可以彻底停止。