2009-07-27 10 views
1

、それはおそらく予期しないエラーが発生して終了を取得します。Pythonで予期せず終了した後にプログラムを再実行するには?私はそれのアルファ性質によるPythonでIRCボットを書いて

私はもう一度実行プログラムを作成するために使用できる技術は何ですか?

+0

は、私はちょうど私の答えは間違って何かが含まれていることに気づきました。今修正されました。 –

答えて

5

あなたは、プログラムが異常終了した(一般的に、1はエラーの場合に返される)ことを伝えるためにsys.exit()を使用することができます。あなたの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()が使用される)、スクリプトを再起動します。 これは、次のようになります。「一般的に、1はエラーの場合に返される」あるべき「一般的には、0がエラーの場合に返されます」:

import subprocess 

command = 'thescript' 
args = ['arg1', 'arg2'] 

while True: 
    ret_code = subprocess.call([command] + args) 

    if ret_code == 0: 
     break 
+0

非常にPythonic :-) –

0

最も簡単な方法は、エラーをキャッチし、古いを閉じて、あなたはEMをキャッチしないとき、プログラムの新しいインスタンスを開くことです。 (例では、それはエラーをスローせずに動作を停止し)、それは常に動作しません

注意。

1

あなたは子プロセスとして、アプリケーションを起動し、それは実行だ追跡するサブプロセス(http://docs.python.org/library/subprocess.html)を使用してラッパーを作成することができます。

関連する問題