0

間にバッチ コマンドがある Python スクリプトがあります。

batch_cmd = "batch command"
subprocess.call(batch_cmd)

失敗した場合にこのバッチ コマンドの実行を繰り返したいというシナリオを考えてみましょう。「例外」部分でもbatch_cmdを繰り返さなければならないような方法で、try/exceptを使用しようとしました。あれは:

try: 
    batch_cmd = "batch command"
    subprocess.call(batch_cmd)

except:
    print "error. retrying"
    subprocess.call(batch_cmd)

ただし、例外はキャッチされません。try ブロック内のバッチ コマンドが失敗した場合、'except' ブロックをバイパスし、残りのスクリプトを実行します。これの try/except 部分をどのように書き直すことができますか? または、try/except 以外の方法はありますか? SOについて同様の質問があったことは知っていますが、これまでのところ解決策は役に立ちませんでした。

4

3 に答える 3

2

呼び出されたコマンドが失敗した場合 (ゼロ以外の終了コード) に例外が必要な場合は、 を使用subprocess.check_call(batch_cmd)して実行します。

except subprocess.CalledProcessError:この場合にも、必要以上の例外をキャッチしないようにするために使用します。

于 2013-04-17T21:48:21.697 に答える
1

私はそれをお勧めしません。どちらかといえば、固定の再試行回数を設定し、試行回数が多すぎる場合はカウンターを使用してループを中断する必要があります。それでも失敗する場合raiseは、新しい例外を実行して、コードが続行されないようにします。

本当に必要な場合は、このような再帰的なことを行うことができます。

def ExectuteBatchCommand(batch_cmd)
    try: 
        subprocess.call(batch_cmd)
    except subprocess.CalledProcessError:
        print "error. retrying"
        ExectuteBatchCommand(batch_cmd)
于 2013-04-17T21:49:45.447 に答える
0

subprocess.call はエラー コードを返します。それを変数に入れ、if文を使用して失敗したかどうかを確認します。

于 2013-04-17T21:48:03.010 に答える