Pythonスクリプトが終了した後存続のpythonから呼び出されたシェルスクリプトのだろうか?

StackOverflow https://stackoverflow.com/questions/2240494

  •  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()のようなものを使用する必要があります。これにはいくつかの良い料理のスタイルのソリューションのためのサブプロセスのを見てみましょう。

一般的に、その親から独立しての長期稼働しているサーバーを起動するには、あなたはそれをデーモン化する必要があります。ご使用の環境によっては、このプロセスを支援することができ、様々なラッパーがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top