13

シェルスクリプト内で、次のコマンドを実行します。

python script.py

私は2つの部分からなる質問として疑問に思いました:

  1. Pythonスクリプトで何が起こっているかに応じて、それを実行したシェルスクリプトにステータスを返すようにPythonスクリプトをプログラムするにはどうすればよいですか。たとえば、Pythonスクリプトで問題が発生した場合は、シェルに返送されるコード1で終了します。

  2. シェルスクリプトでPythonの終了コードを読み取って、エラーが発生した場合に終了するにはどうすればよいですか?たとえば、0以外のステータスコードは終了します。

4

2 に答える 2

28

まず、目的の終了コードを引数としてsys.exitPython スクリプトに渡すことができます。

2 つ目は、最後に終了したプロセスの終了コードがbashパラメータにあります$?。ただし、明示的にチェックする必要はない場合があります。

if python script.py; then
    echo "Exit code of 0, success"
else
    echo "Exit code of $?, failure"
fi

if終了コードを明示的にチェックするには、ステートメントに条件式を指定する必要があります。

python script.py
if [[ $? = 0 ]]; then
    echo "success"
else
    echo "failure: $?"
fi
于 2013-01-21T22:02:42.750 に答える
2

恐竜を復活させるのは嫌いですが、この選択された回答は書かれたとおりに機能しましたが、複数の終了コードをチェックできるバリエーションを追加したかったのです。$?最後に実行されたプログラムの終了コードを一度だけ取得するようです。したがって、複数のケースに対して終了コードをチェックする必要がある場合は、変数に割り当て$?てから変数をチェックする必要があります (@chepner の例を使用):

python script.py
exit_code=$?
if [[ $exit_code = 0 ]]; then
    echo "success"
elif [[ $exit_code = 1 ]]; then
    echo "a different form of success, maybe"
else
    echo "failure: $exit_code"
fi
于 2020-09-29T15:48:44.650 に答える