script xyz.py returned exit code 0
というメッセージが表示されました。これは何を意味するのでしょうか?
Pythonの終了コードはどういう意味ですか?いくつありますか?どれが重要ですか?
スクリプトで探しているのは sys.exit()
の呼び出しです。そのメソッドの引数は終了コードとして環境に返されます。
スクリプトがexitメソッドを呼び出すことは決してなく、0がデフォルトの終了コードです。
sys.exit
のドキュメント から---:
オプションの引数argは、終了ステータスを示す整数(デフォルトは0)、または別の種類のオブジェクトです。整数の場合、ゼロなどは「正常終了」と見なされ、ゼロ以外の値はシェルなどによって「異常終了」と見なされます。ほとんどのシステムでは、0から127の範囲であることを要求し、そうでなければ未定義の結果を生成します。いくつかのシステムは特定の意味を特定の終了コードに割り当てるための規約を持っています、しかしこれらは一般的に未発達です。 Unixプログラムは通常、コマンドライン構文エラーに2を、その他の種類のエラーに1を使います。
終了コードが使用される一例はシェルスクリプトです。 bashでは、最後の終了ステータスについて特別な変数$?
を調べることができます。
me@mini:~$ python -c ""; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(0)"; echo $?
0
me@mini:~$ python -c "import sys; sys.exit(43)"; echo $?
43
個人的には/usr/include/asm-generic/errno.h
(Linuxシステム上)にある終了コードを使おうとしますが、これが正しいことかどうかわかりません。
標準の終了コードを定義する errno
モジュールがあります。
たとえば、アクセス拒否はエラーコード13です。
import errno, sys
if can_access_resource():
do_something()
else:
sys.exit(errno.EACCES)
レコードには、ここで定義されている POSIX標準の終了コードを使用できます 。
例:
import sys, os
try:
config()
except:
sys.exit(os.EX_CONFIG)
try:
do_stuff()
except:
sys.exit(os.EX_SOFTWARE)
sys.exit(os.EX_OK) # code 0, all ok
終了コード0は通常、「ここで問題ないこと」を意味します。しかし、スクリプトのプログラマーが規約に従わなかった場合は、その意味を理解するためにソースを調べなければならない可能性があります。通常、ゼロ以外の値がエラーコードとして返されます。
オペレーティングシステムのコマンドには終了コードがあります。これに関するいくつかの資料を見るために linux exit codes を探してください。シェルは終了コードを使用して、プログラムが機能したのか、問題があるのか、または失敗したのかを判断します。標準の(または少なくとも一般的に使用されている)終了コードを作成するためのいくつかの努力があります。こちらをご覧ください Advanced Shell Script 投稿。
移植可能なように 標準のPOSIX終了コード を使用したい場合は、PyPIの exitstatus パッケージを参照してください。
パッケージをインストールしてください。
pip install exitstatus
あなたのコードで使う:
import sys
from exitstatus import ExitStatus
sys.exit(ExitStatus.success)
終了コードは、スクリプト作成者によって割り当てられた意味を持つだけです。 Unixの伝統は、終了コード0は「成功」を意味し、それ以外は失敗です。特定のスクリプトの終了コードが何を意味するのかを確認する唯一の方法は、スクリプト自体を調べることです。
答えは、「終了コード0が何を意味するのかによります」です。
ただし、ほとんどの場合、これは「すべて問題ありません」を意味します。
私はPOSIXが好きです:
だから、シェル上で、私は入力します:
python script.py && echo 'OK' || echo 'Not OK'
私のPythonスクリプトがsys.exit(0)
を呼び出すと、シェルは 'OK'を返します。
私のPythonスクリプトがsys.exit(1)
(またはゼロ以外の整数)を呼び出すと、シェルは 'Not OK'を返します。
シェルに精通し、スクリプトのドキュメント(またはソース)を読んで終了コードの意味を確認するのはあなたの仕事です。
Sys.exit()を使うよりもexit(0)を組み込んだクリーンシャットダウンをお勧めします。
これが良いアドバイスかどうかはわかりません。
非常にドキュメンテーションが言及されている 読みます:
サイトモジュール(-Sコマンドラインオプションが指定されている場合を除き、起動時に自動的にインポートされます)は、組み込み名前空間にいくつかの定数を追加します。これらは対話型のインタプリタShellにとって有用であり、はプログラム内では使用すべきではありません。
その後:
終了(code = None)
印刷時に「quit()またはCtrl-D(すなわちEOF)を使用して終了する」などのメッセージを印刷し、呼び出されたときに指定された終了コードでSystemExitを発生させるオブジェクト。
これを sys.exit() のドキュメントと比較すると、SystemExit
例外を発生させるのと同じメカニズムが使用されています。
多くのプログラミング言語の終了コードはプログラマ次第です。だからあなたのプログラムのソースコード(またはマニュアル)を見なければなりません。ゼロは通常「すべてがうまくいった」ことを意味します。
例外ハンドラなどを実行できるようにするには、プロセスを突然終了させるexit(0)
を使用するのではなく、 sys.exit()
ビルトインを使用してクリーンシャットダウンを実行することをお勧めします。