java - 使用 Process 动态运行 java 代码

标签 java java-7

我创建了一个类,它可以动态编译、加载到 CustomClassLoader 中,并通过调用它的 main 来执行内存中的 java 源(即:没有类文件)java 源方法。

我需要捕获 StdOutStdInStdErr,尽管在​​我当前的代码中不可能这样做。 (编译器 API + 类加载器 + 反射)

我的要求可能this question 中的要求相同- 正如已接受的答案所建议的 - 使用 java.lang.Process 。如果文件系统中有可用的物理文件,这会更容易,但在本例中没有。

我计划删除Classloader + Reflection策略并使用建议;不过,我实际上并不熟悉使用 Process 类重定向 Std*

如何在 Java 7 中执行此操作? (高度赞赏片段)或者更重要的是,有更好的方法吗?

最佳答案

  • 备份现有输出流。

PrintStream realSystemOut = System.out;

  • 将其设置为其他输出流 [ fileOutputStream,或其他一些流] PrintStream overridePrintStream = new PrintStream(new FileOutputStream("log.txt"));

    System.setOut(overridePrintStream);

    -----进程-----

  • 将实际流放回 System.out

    System.setOut(realSystemOut);

谢谢

关于java - 使用 Process 动态运行 java 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18859410/

相关文章:

Java服务器故障: can't change from "localhost"

java - 用于多个 Web 应用程序的 Hazelcast 架构

java - Spring MVC 找不到处理程序

java - 为 Eclipse 配置 Spartan 重构插件

java - 是否可以选择加入 Java 7 API?

Java 空输入方法

java - 没有任何配置的tomcat 7部署速度慢

java - 在 Eclipse 中将项目构建为可执行 jar 文件时,缓冲图像不呈现

java - 将字符串日期转换为java 7中yyyy-MM-dd'T'HH :mm:ss. SSSSSS格式的字符串

java - 如何在遇到断点时自动执行 void 方法?