質問
script xyz.pyが終了コード0を返したというメッセージが表示されました
。これはどういう意味ですか?
Pythonの終了コードは何を意味しますか?いくつありますか?どれが重要ですか?
解決
スクリプトで探しているのは、 sys.exit()
。そのメソッドの引数は、終了コードとして環境に返されます。
スクリプトがexitメソッドを呼び出すことはなく、デフォルトの終了コードは0である可能性が高いです。
他のヒント
オプションの引数argは 終了ステータスを示す整数 (デフォルトはゼロ)、または別のタイプ オブジェクトの。整数の場合、ゼロ 「成功した終了」とみなされます ゼロ以外の値が考慮されます シェルによる「異常終了」および など。ほとんどのシステムはそれを必要とします 0〜127の範囲にあり、 それ以外の場合、未定義の結果。一部 システムには 特定の意味を割り当てる 特定の終了コードですが、これらは 一般的に未開発。 Unix プログラムは通常、コマンドに2を使用します 行構文エラーおよびその他すべての場合は1 エラーの種類。
終了コードが使用される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
モジュールがありますコード:
たとえば、 Permission denied はエラーコード 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終了コードを探して、これに関する資料を参照してください。シェルは、終了コードを使用して、プログラムが機能したか、問題があるか、失敗したかを判断します。標準(または少なくとも一般的に使用される)終了コードを作成するための努力があります。こちらの高度なシェルスクリプトの投稿をご覧ください。
標準POSIX終了コードを移植可能に使用する場合、PyPIの exitstatus パッケージを参照してください。
パッケージのインストール:
pip install exitstatus
コードで使用:
import sys
from exitstatus import ExitStatus
sys.exit(ExitStatus.success)
終了コードは、スクリプト作成者によって割り当てられた意味のみを持ちます。 Unixの伝統では、終了コード0は「成功」を意味し、その他は失敗を意味します。特定のスクリプトの終了コードの意味を確認する唯一の方法は、スクリプト自体を調べることです。
答えは「終了コード0の意味に依存」
ただし、ほとんどの場合、これは「すべてが正常」という意味です
POSIXが好きです:
そのため、シェルで次のように入力します:
python script.py&&エコー 'OK' || echo 'Not OK'
Pythonスクリプトが sys.exit(0)
を呼び出すと、シェルは「OK」を返します
私のPythonスクリプトが sys.exit(1)
(またはゼロ以外の整数)を呼び出すと、シェルは「Not OK」を返します
シェルで賢くなり、スクリプトのドキュメント(またはソース)を読んで終了コードの意味を確認するのはあなたの仕事です。
sys.exit()を使用するのではなく、exit(0)組み込みのクリーンシャットダウンを推奨します
これが良いアドバイスかどうかわかりません。
記載されているドキュメント読み取り:
サイトモジュール(起動時に自動的にインポートされますが、-Sコマンドラインオプションが指定されている場合を除く)は、組み込みの名前空間にいくつかの定数を追加します。これらは対話型インタープリターシェルに役立ち、プログラムでは使用しないでください。
その後:
exit(code = None)
印刷時に「quit()またはCtrl-D(つまりEOF)を使用して終了」などのメッセージを印刷し、呼び出されたときに指定された終了コードでSystemExitを発生させるオブジェクト。
sys.exit()と比較した場合ドキュメント、それは SystemExit
例外を発生させるのと同じメカニズムを使用しています。
多くのプログラミング言語の終了コードはプログラマー次第です。そのため、プログラムのソースコード(またはマニュアル)を確認する必要があります。通常、ゼロは「すべてがうまくいった」ことを意味します。
例外ハンドラーやその他の実行を許可するには、でクリーンシャットダウンすることをお勧めします。プロセスを突然終了する sys.exit()
を使用するのではなく、 exit(0)
ビルトイン。