我有一个用Python编写的小程序(Linux上的2.7.3版本),它在循环中的许多文件上运行外部命令。它使用subprocess.check_output
执行此操作,然后将输出中的数据写入Sqlite3数据库。我有两个问题:
当我点击Ctrl+C
停止程序时,所有发生的事情都是执行的子进程被终止,主程序继续下一次迭代并启动下一个子进程。
如果我使用kill -9
从另一个窗口强行杀死它,它会退出,但数据库文件不包含任何更改。
我已经阅读了几个小时并尝试了各种各样的事情,包括信号处理程序,try
/ finally
等等。到目前为止,我无法做到应该非常简单的事情。
那么,我怎样才能让Python程序接受Ctrl+C
并彻底终止,以便其子进程结束并正确保存其sqlite3数据库?
(只是添加它,如果程序保持运行完成,它会干净地退出并且数据库文件会按预期更新)
答案 0 :(得分:0)
在此处有一个非常好的讨论/资源来理解杀死子进程:How does Ctrl-C terminate a child process?
sql问题(没有更多信息)听起来像是在你不成熟地杀死进程时中断了提交数据的过程
答案 1 :(得分:0)
我记得,您可以使用try / except检查Route::post('events/{id}', EventsController@destroy)
:
Ctrl-C
我在开发期间一直这样做,这样如果发现错误,我就可以彻底停止。