Позвольте мне начать с того, что я действительно пытаюсь сделать. Нам нужен независимый от платформы стартовый скрипт для вызова JVM с некоторыми системными свойствами и динамически генерируемым путем к классам. В частности, мы выбрали Jython, потому что нам нужно зависеть только от отдельного jython.jar в нашем скрипте запуска. Мы решили, что можем написать jython-скрипт, который использует subprocess.Popen, чтобы запустить jvm нашего приложения, а затем завершить работу.
Еще одна вещь. Наше приложение использует много унаследованного отладочного кода, который печатается в стандартном формате. Таким образом, скрипт запуска обычно перенаправляет stdout / stderr в файл журнала. Я попытался воспроизвести это с помощью нашего скрипта jython так:
subprocess.Popen(args,stdout=logFile,stderr=logFile)
После этой строки скрипт запуска и хостинг jvm для jython завершается. Проблема в том, что ничего не отображается в файле журнала. Если я вместо этого сделаю это:
subprocess.Popen(args,stdout=logFile,stderr=logFile).wait()
тогда мы получаем логи. Таким образом, родительский процесс должен выполняться параллельно процессу приложения, запущенному через подпроцесс? Я хочу избежать двух запущенных jvms.
Можете ли вы вызвать подпроцесс таким образом, что файл stdout будет записан, даже если родительский процесс завершится? Есть ли лучший способ запустить приложение jvm из jython? В любом случае Jython - плохое решение?