3

Python (Linux ではバージョン 2.7.3) で記述された小さなプログラムがあり、ループ内の多数のファイルに対して外部コマンドを実行します。を使用してこれをsubprocess.check_output行い、出力から Sqlite3 データベースにデータを書き込みます。私には2つの問題があります:

  1. プログラムを停止するためにヒットCtrl+Cすると、実行中のサブプロセスが強制終了され、メイン プログラムが次の反復を続行して次のサブプロセスを起動するだけです。

  2. 別のウィンドウから強制kill -9終了すると終了しますが、データベースファイルには変更が含まれていません。

私は数時間読んでいて、シグナルハンドラーなどを含むさまざまなことを試していtryますfinally。私はこれまで、非常に単純であるべきことを行うことができませんでした。

Ctrl+Cでは、サブプロセスが終了し、sqlite3 データベースが正しく保存されるように、Python プログラムに a を受け入れてきれいに終了させるにはどうすればよいでしょうか?

(それを追加するだけで、プログラムが完了するまで実行されたままになっている場合、プログラムは正常に終了し、データベースファイルは期待どおりに更新されます)

4

2 に答える 2

0

ここには、子プロセスの強制終了を理解するための非常に良い議論/リソースがあります: How does Ctrl-C terminate a child process?

SQLの問題(詳細なし)は、プロセスを未熟に強制終了すると、プロセスがデータをコミットするのを中断しているように聞こえます

于 2013-05-17T15:52:30.913 に答える