jython杀死生成子进程的父进程是否将子进程标准输出中断到文件?

2024-04-26 11:23:38 发布

您现在位置:Python中文网/ 问答频道 /正文

让我从我真正想做的事情开始。我们需要一个独立于平台的启动脚本来调用具有一些系统属性和动态生成的类路径的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是个糟糕的解决方案吗?在


Tags: 文件脚本应用程序属性进程系统stderrstdout
1条回答
网友
1楼 · 发布于 2024-04-26 11:23:38

We want a platform independent startup script for invoking a JVM with some system properties and a dynamically generated classpath.

可以使用独立于平台的脚本在安装时或每次调用之前生成特定于平台的启动脚本。另外,在后一种情况下,您需要一个简单的静态平台特定脚本,该脚本调用独立于平台的启动脚本生成脚本,然后调用生成的脚本本身。在这两种情况下,都是通过调用特定于平台的静态脚本来启动应用程序的。在

Can you invoke subprocess in such a way that the stdout file will be written even if the parent process terminates?

您可以在子进程中打开文件/重定向,例如使用shell:

Popen(' '.join(args+['>', 'logFile', '2>&1']), # shell specific cmdline
      shell=True) # on Windows see _cmdline2list to understand what is going on

相关问题 更多 >