python - jython 杀死生成子进程的父进程会破坏子进程标准输出到文件吗?

标签 python jython

让我从我真正想做的事情开始。我们需要一个独立于平台的启动脚本,用于调用具有一些系统属性和动态生成的类路径的 JVM。我们特别选择 Jython,因为我们只需要在启动脚本中依赖独立的 jython.jar。我们决定编写一个 jython 脚本,使用 subprocess.Popen 启动应用程序的 jvm,然后终止。

还有一件事。我们的应用程序使用了大量打印到标准输出的遗留调试代码。因此,启动脚本通常将 stdout/stderr 重定向到日志文件。我尝试用我们的 jython 脚本重现它,如下所示:

subprocess.Popen(args,stdout=logFile,stderr=logFile)

在此行之后,启动器脚本和 jython 的托管 jvm 将终止。问题是日志文件中没有显示任何内容。如果我这样做:

subprocess.Popen(args,stdout=logFile,stderr=logFile).wait()

然后我们得到日志。那么父进程需要与通过子进程启动的应用程序进程并行运行吗?我想避免有两个正在运行的 jvm。

您能否以这样的方式调用子进程,即使父进程终止,stdout 文件也会被写入?有没有更好的方法从 jython 启动应用程序 jvm? Jython 是一个糟糕的解决方案吗?

最佳答案

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

关于python - jython 杀死生成子进程的父进程会破坏子进程标准输出到文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7922338/

相关文章:

python - Django 测试运行器不尊重 unittest.TestCase?

python - != 和 <> 有什么区别?

java - 如何在 Jython 项目中创建基于 Sphinx 的文档?

python - 列出具有不同结果的操作

python - Django 查询中的列比较

java - Jython,从 Java 代码内部停止脚本执行

java - 从 mule esb 向主程序传递参数

websphere - 使用 wsadmin Jython 修改 namespace 绑定(bind)

java - Python 解释器 Jython - 模块的执行

python - 无法从列表中选择值