web-dev-qa-db-ja.com

モジュールsysを介して実行されるコマンドを使用して、Pythonプログラムを取得して自分自身を強制終了するにはどうすればよいですか?

モジュールsysを使用してコマンドを発行することにより、Pythonプログラムがどのように自殺できるかを知りたいのですが、次の形式のコマンドを使用して自殺するにはどうすればよいですか? :

os.system(killCommand)

編集:明確にするために強調する

したがって、明確にするために、Pythonプログラムを強制終了するシェルで実行される文字列が必要です。

6
d3pd

sys.exit()を使用して、プログラムを正常に終了できます。

SystemExit(status)を上げて、インタープリターを終了します。ステータスが省略されているか、Noneの場合、デフォルトでゼロになります(つまり、成功)。ステータスが整数の場合、システムの終了ステータスとして使用されます。別の種類のオブジェクトの場合は、印刷され、システムの終了ステータスは1になります(つまり、失敗)。


インタプリタ自体を強制終了するシステムコマンドは、使用されるシェルによって異なります。シェルがbashまたはzshの場合、次を使用できます。

_a@Host:~$ python
Python 2.7.8 (default, Oct 20 2014, 15:05:19) 
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system('kill $PPID')
Terminated
a@Host:~$
_

実際の結果は異なる場合がありますが。安全のために、プロセスIDを自分で提供する必要があります。

_>>> os.system('kill %d' % os.getpid())
_

プロセスに送信されるgetシグナルだけが必要な場合は、プロセスのプロセスIDでos.kill()を使用することもできます。現在実行中のプロセスのプロセスIDは、os.getpid()から入手できます。

_a@Host:~$  python
Python 2.7.8 (default, Oct 20 2014, 15:05:19) 
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.kill(os.getpid(), 9)
[1]    27248 killed     python
a@Host:~$ 
_
16
Antti Haapala

sys.exit(1)は、現在のプログラムを終了します。パラメータは終了ステータスです。0以外は異常終了を示します。

1
mbatchkarov

メインプロセス(つまり、メールpythonスクリプト))にいる場合は、osモジュールを使用できます

import os
import signal

#Your Python code
os.kill(os.getpid(),signal.SIGKILL)
0
iron coder

実際にはそれは何ですかsys.exitは:

sys.exit([arg])

Pythonを終了します。これは SystemExit 例外を発生させることで実装されるため、tryステートメントのfinally節で指定されたクリーンアップアクションが尊重され、外部レベルで終了試行をインターセプトすることができます。

オプションの引数argは、終了ステータス(デフォルトはゼロ)を示す整数、または別のタイプのオブジェクトにすることができます。整数の場合、ゼロは「正常終了」と見なされ、ゼロ以外の値はシェルなどによって「異常終了」と見なされます。ほとんどのシステムでは、0〜127の範囲である必要があり、そうでない場合は未定義の結果が生成されます。一部のシステムには、特定の終了コードに特定の意味を割り当てるための規則がありますが、これらは一般に未開発です。 Unixプログラムは通常、コマンドライン構文エラーに2を使用し、その他すべての種類のエラーに1を使用します。別のタイプのオブジェクトが渡された場合、Noneはゼロを渡すことと同等であり、他のオブジェクトはstderrに出力され、終了コードは1になります。特に、sys.exit( "some error message")はエラーが発生したときにプログラムを終了します。

Exit()は最終的に「のみ」例外を発生させるため、メインスレッドから呼び出された場合にのみプロセスを終了し、例外はインターセプトされません。

0
Kasramvd