让我从我真正想做的事情开始。我们需要一个独立于平台的启动脚本来调用具有一些系统属性和动态生成的类路径的JVM。我们特别选择Jython是因为我们只需要依赖于独立的jython.jar在我们的启动脚本中。我们决定编写一个jython脚本子流程.Popen启动应用程序的jvm,然后终止。在
还有一件事。我们的应用程序使用了大量打印到标准输出的遗留调试代码。因此启动脚本通常会将stdout/stderr重定向到日志文件。我试着用我们的jython脚本复制这个脚本:
subprocess.Popen(args,stdout=logFile,stderr=logFile)
在这一行之后,启动程序脚本和jython的宿主jvm终止。问题是日志文件中没有显示任何内容。如果我这样做:
^{pr2}$然后我们得到日志。那么父进程需要与通过子进程启动的应用程序进程并行运行?我想避免有两个运行的jvm。在
您能以这样的方式调用子进程,即使父进程终止,也能写入stdout文件吗?有没有更好的方法从jython启动应用程序jvm?Jython是个糟糕的解决方案吗?在
可以使用独立于平台的脚本在安装时或每次调用之前生成特定于平台的启动脚本。另外,在后一种情况下,您需要一个简单的静态平台特定脚本,该脚本调用独立于平台的启动脚本生成脚本,然后调用生成的脚本本身。在这两种情况下,都是通过调用特定于平台的静态脚本来启动应用程序的。在
您可以在子进程中打开文件/重定向,例如使用shell:
相关问题 更多 >
编程相关推荐