私はPythonでIRCボットを書いていますが、そのアルファの性質により、予期しないエラーが発生して終了する可能性があります。
プログラムを再度実行するために使用できる手法は何ですか?
sys.exit()
プログラムが異常終了したことを通知するために使用できます(通常、エラーの場合は1が返されます)。
Pythonスクリプトは次のようになります。
import sys
def main():
# ...
if __name__ == '__main__':
try:
main()
except Exception as e:
print >> sys.stderr, e
sys.exit(1)
else:
sys.exit()
エラーが発生した場合は再度呼び出すこともできますmain()
が、プログラムが正常に動作する状態になっていない可能性があります。代わりに、新しいプロセスでプログラムを起動する方が安全な場合があります。
したがって、Pythonスクリプトを呼び出し、終了時に戻り値を取得し、戻り値が0(sys.exit()
デフォルトで戻り値として使用されるもの)と異なる場合にスクリプトを再起動するスクリプトを作成できます。これは次のようになります。
import subprocess
command = 'thescript'
args = ['arg1', 'arg2']
while True:
ret_code = subprocess.call([command] + args)
if ret_code == 0:
break
サブプロセス( http://docs.python.org/library/subprocess.html )を使用してラッパーを作成できます。これにより、アプリケーションが子プロセスとして生成され、その実行が追跡されます。
最も簡単な方法は、エラーをキャッチし、emをキャッチしたときに、プログラムの古いインスタンスを閉じて新しいインスタンスを開くことです。
常に機能するとは限らないことに注意してください(エラーをスローせずに機能を停止した場合)。