私が本当にやろうとしていることから始めましょう。いくつかのシステムプロパティと動的に生成されたクラスパスを持つJVMを呼び出すための、プラットフォームに依存しない起動スクリプトが必要です。私たちは起動スクリプトのスタンドアロンのjython.jarに依存する必要があるだけなので、特にJythonを選びました。私たちは、アプリケーションのjvmを起動するためにsubprocess.Popenを使用するjythonスクリプトを記述して終了することにしました。
もう一つ。私たちのアプリケーションは、標準出力に出力する多くのレガシーデバッグコードを使用しています。したがって、通常、起動スクリプトはstdout/stderrをログファイルにリダイレクトしています。私はこのような私たちのjythonスクリプトでそれを再現しようとしました:
subprocess.Popen(args,stdout=logFile,stderr=logFile)
この行の後に、ランチャースクリプトとjython用のjvmホストが終了します。問題はlogFileに何も表示されないことです。私が代わりにこれを行う場合:
subprocess.Popen(args,stdout=logFile,stderr=logFile).wait()
ログを取得します。したがって、親プロセスは、サブプロセスを介して起動されるアプリケーションプロセスと並行して実行する必要がありますか?私は2つのjvmsを実行することを避けたい。
親プロセスが終了してもstdoutファイルが書き込まれるようにサブプロセスを呼び出すことはできますか? jythonからアプリケーションjvmを起動するには良い方法はありますか?とにかくJythonは悪い解決策ですか?