今日は、Pythonスクリプトの終了/終了についてのトピックに飛び込みます! 始める前に、Pythonが何であるかについての基本的な理解と、その使用に関する基本的な知識が必要です。
お好みのIDEを使用できますが、今回はMicrosoftのLinux Subsystem for Windows(WSL)パッケージを使用します。 その詳細と、Windows10で有効にする方法については、こちらを参照してください。
目次
なぜPythonはスクリプトが完了したら自動的に終了するのですか?,
Pythonがコードブロックを実行する方法は、インポートする依存関係をチェックし、メモリに格納する定義とクラスを読み取り、定義された定義とクラスへのループとコールバックを可能にするためにコードを実行するように、各行を順番に実行するようにします。
Pythonインタプリタがファイルの最後(EOF)に到達すると、IDEを介したユーザーの入力であろうと、ファイルからの読み取りであろうと、ソースからこれ以上読み取ることができないことに気づきます。 実証するために、ユーザー入力を取得し、実行の途中でインタプリタを中断しようとしましょう!,
まず、PowerShellのbash端末から”input”という新しいファイルを開きます。,N PowerShellウィンドウを右クリックして次をシェルに貼り付けます
name=input("Don"t type anything!\n")print("Hi,",name,"!")
今度は、CTRL+X
nanoウィンドウを保存して終了し、シェルタイプで
$ python3 input.pyDon"t type anything!
CTRL+D
を押して、ユーザーを待っている間にプログラムを終了します。input
Traceback (most recent call last):File "input.py", line 1, in name=input("Don"t type anything!")EOFError
EOFError
例外は、ユーザーが入力データを入力しなかったため、コードの実行が終了する前にpythonインタプリタがファイルの終わり(eof)条件にヒットしたことを示しています。,
Pythonが例外をスローせずにすべてのコードを実行したと同時にEOF条件に達すると、Pythonが”正常に終了する方法”となります。”
Detect script exit
例外をスローせずにPythonプログラムがいつ終了するかを知りたい場合は、組み込みのPythonatexit
モジュール。
atexit
プログラムが終了するときに実行したいことを処理し、通常はプログラムプロセスが終了する前にプログラムのクリーンアップを行うために使用されます。
atexitを試してみるために、入力を変更しましょう。,pyプログラム終了時にメッセージを出力する例。 を開きます。input.py
import atexitatexit.register(print,"Program exited successfully!")name=input("What"s your name?\n")print("Hi,",name,"!")
あなたの名前を入力すると、enterキーを押すと次のようになります。
What"s your name?ExampleHi, Example !Program exited successfully!
atexit
呼び出しを配置しても、出力の最後に終了テキストがどのように表示されるかに注意してください。呼び出し、単純なprint()
呼び出し、コードが終了する場所ではなく、print()
すべてが作成された終了テキストを取得します。,
Program exited successfully!What"s your name?ExampleHi, Example !
優雅な終了
例外をスローしないPythonプログラムを終了するには、いくつかの方法があります。quit()
bashコマンドを使用できますiv id=”c97ec710eb”
pythonインタプリタの終了コードを取得します。,
quit()
256未満の整数引数
exit()
quit()
quit()
quit()
exit()
は、どちらもsite
モジュールを必要とするため、良い習慣と見なされます。, 私たちのプログラムでは、sys.exit
exit()
を呼び出すためにモジュールを明示的にインポートする必要があることに注意してください。これは改善されていないように見えるかもしれませんが、site
実行時にロードされるという良い仮定ではないため、必要なモジュールがロードされることを保証します。, 余分なモジュールをインポートしたくない場合は、exit()
、quit()
およびsys.exit()
舞台裏でやっていることとraise SystemExit
エラーメッセージ
ユーザーから不正な入力を受け取った場合はどうなりますか?, 私たちのinput.py
スクリプトを振り返り、ユーザーからの不正な入力を処理する機能を追加しましょう(CTRL+D
EOF文字を渡す)
try
ステートメントは、Pythonにステートメント内のコードを試してみるように指示します。終了する前に、except
ステートメントに例外を渡します。
エラーなしで終了
ユーザーがプログラムにエラーを渡したが、コードにエラーを出力したくない場合、またはユーザーの影響を最小限に抑えるために何らかのエラー処理を行いたくない場合はどうなりますか?,
finally
ステートメントを追加して、catch
ユーザーが発生したことを知らないことに注意してください。貧しい入力または引数の。,
リソースを終了して解放する
一般的に、Pythonはプログラムが終了すると自動的に呼び出されたすべてのリソースを解放しますが、特定のプロセスでは、限られたリソースをwith
ブロックに含めることをお勧めします。
多くの場合、open()
呼び出しでこれが表示されますが、ファイルを適切にリリースできないと、後でファイルの読み取りまたは書き込みに問題が生じる可能性があります。
with
ブロックは、その中で要求されたすべてのリソースを自動的に解放します。, ファイルが閉じられていることをより明示的に確認したい場合は、atexit.register()
コマンドを使用してclose()
$ nano openfile.pyimport atexitfile=open("testfile.txt","w")file.write("let"s write some text!\n")atexit.register(file.close)
with
ブロックを使用せずにリソースが呼び出された場合は、atexit
コマンド。
しばらくすると終了します
プログラムが正常に終了しないことを心配している場合は、Pythonのmultiprocessing
モジュールを使用してプログラムが終了するようにします。,
関数が7秒待つように指示されたが、完了し、0秒待つように指示されたときに想定されていたものを印刷したときに、プロセスが完
returnステートメントを使用して終了
プログラム全体を終了するために使用するコードのセクションがある場合、break
ステートメントがループの外でコードを続けるのではなく、return sys.exit()
コードを完全に終了することができます。,
関数の途中で終了します
returnステートメントを使用したくない場合でも、sys.exit()
を呼び出してプログラムを閉じ、return
を別のブランチで提供することができます。 からのコードを使用してみましょうbreak.py もう一度
条件が満たされたときに終了
Pythonコードにループがあり、問題が発生した場合にコードが終了できることを確認したい場合は、チェックできるフラグを使用してプログラムを終了させることができます。,
キーを押すと終了します
キーを押すまでプログラムをコンソールで開いたままにしたい場合は、バインドされていないinput()
$ nano holdopen.pyinput("Press enter to continue")$ python3 holdopen.pyPress enter to continue$
CTRL+C
をコンソールに渡して、PythonにKeyboardInterrupt
文字を与えることもできます。 以前に例外を処理したように、KeyboardInterrupt
例外を処理することもできます。,
マルチスレッドプログラムを終了する
マルチスレッドプログラムを終了することは、単純なsys.exit()
現在のスレッドを終了するスレッドから呼び出されるため、少し複雑です。, それを行うための”汚い”方法は、os._exit()
ご覧のとおり、プログラムは終了する前に残りのプログラムを印刷しませんでした。os._exit()
は通常、最後の手段のために予約されており、Thread.join()
は、マルチスレッドプログラムを終了するための推奨される方法です。,
sys exitなしで終了
Sys.exit()
Pythonプログラムを終了できるいくつかの方法の一つに過ぎません。sys.exit()
が行うことはraise SystemExit
なので、組み込みpythonの例外または私たち自身のいずれかを作成します!
os._exit()
を使用して、ホストシステムにpythonプロセスを強制終了するように指示することもできますが、これはatexit
,
例外時に終了
処理なしで例外を終了する場合は、try-except
ブロックを使用してos._exit()
を実行できます。
終了して再起動します
最後に、Pythonを終了してプログラムを再起動するために何をすべきかを調べます。
私はあなたがチュートリアルが役に立つことを願っています。 戻ってくるんだ
ありがとうございます。,
LikeGeeksの創設者です。 私は2010年以来Linuxシステム管理者として働いています。 私は当社で責任を確保、およびトラブルシューティングLinuxサーバを複数のクライアントの世界です。 私は書面でシェルおよびPythonスクリプト自動化しています。