Pythonスクリプトが終了した後存続のpythonから呼び出されたシェルスクリプトのだろうか?
-
19-09-2019 - |
質問
自動テストの一環として、私は、呼び出し元のスクリプトが終了した後に対話する必要がある2台の異なるサーバーを起動する2つのシェルスクリプトを呼び出す必要があるPythonスクリプトを持っています。 (これは、実際にはJythonスクリプトだが、私はこの時点で重要なことはよく分からない。)私は何を行うことができますPythonスクリプトが終了した後のサーバーが起きていることを確実にするために?
は、この時点で、彼らはこのような何かと呼ばれています:
def runcmd(str, sleep):
debug('Inside runcmd, executing: ' + str)
os.chdir("/new/dir/")
directory = os.getcwd()
print 'current dir: '+ directory
os.system(str)
t = threading.Thread(
target=runcmd,
args=( cmd, 50,)
)
解決
Pythonのスレッドは、すべてのPythonで死んでしまいます。また、os.systemをブロックしています。しかし、それは大丈夫だ - ()を実行しますos.systemコマンドは(ではなく、子プロセス)新しいプロセスを起動した場合、すべての罰金となります。 Pythonが死んだ後にコマンドが始まる場合Windowsでは、例えば、「スタート」「スタート」「Dプロセスが残ります。
EDIT:nohup
は、Linux上でstart
に相当します。 (S.ロットのおかげ)。
他のヒント
os.system()
は戻りません。 //java.sun: subprocess
のか<のhref = "HTTPを使用。 COM / J2SE / 1.4.2 /ドキュメント/ API / Javaの/ LANG / Runtime.html」のrel = "nofollowをnoreferrer"> Runtime.exec()
のあなたが別のプロセスでそれをしたい場合。
subprocess.Popenを使用すると、あなたのために良い仕事でしょうかしらます。
多分殻のようなものをやっ=真
スレッドが動作しません。あなたの新しいプロセスが実行されるようsystem
コールがあるためブロックを動作しません。
あなたは新しいプロセスを生成し、新しいプロセスでそれを実行するためにos.fork()
のようなものを使用する必要があります。これにはいくつかの良い料理のスタイルのソリューションのためのサブプロセスのを見てみましょう。
一般的に、その親から独立しての長期稼働しているサーバーを起動するには、あなたはそれをデーモン化する必要があります。ご使用の環境によっては、このプロセスを支援することができ、様々なラッパーがあります。