gpt4 book ai didi

Java 从单独的进程获取标准输出和标准错误

转载 作者:行者123 更新时间:2023-11-30 03:22:29 25 4
gpt4 key购买 nike

我正在使用 ProcessBuilder 在我的 Java 程序中启动一个单独的进程,这是该进程的制作过程:

Class klass=Program.class;
String[] output=new String[2];
String javaHome = System.getProperty("java.home");
String javaBin = javaHome +
File.separator + "bin" +
File.separator + "java";
String classpath = System.getProperty("java.class.path");
String className = klass.getCanonicalName();

ProcessBuilder builder = new ProcessBuilder(
javaBin, "-cp", classpath, className);

Process process = builder.start();
process.waitFor();

Program.class 如下:

public class Program {
public static void main(String[] args) {
System.out.println("Hi!");
}

我希望标准输出产生 Hi! 和标准错误,例如,如果我不在 System.out.println("Hi! ") 那么标准错误将是:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
Syntax error, insert ";" to complete BlockStatements

at Program.main(Program.java:6)

那么,我该怎么做呢?理想情况下,程序将它们转换为两个字符串。

谢谢

最佳答案

首先仔细看看 Process类,它有一个 inputStream 属性,该属性附加到进程 stdout。您还可以使用 ProcessBuilder 通过 stdout 重定向 stderr,以使生活更轻松,使用 ProcessBuilder#redirectErrorStream(boolean)

您可以使用其 outputStream 属性写入 Process(尽量不要考虑太多)...

基本上,您希望通过inputStream“读取”“输出”,并通过outputStream“写入”“输入”

类似...

Class klass=Program.class;
String[] output=new String[2];
String javaHome = System.getProperty("java.home");
String javaBin = javaHome +
File.separator + "bin" +
File.separator + "java";
String classpath = System.getProperty("java.class.path");
String className = klass.getCanonicalName();

ProcessBuilder builder = new ProcessBuilder(
javaBin, "-cp", classpath, className);
builder.redirectErrorStream(true);

Process process = builder.start();
int in = -1;
InputStream is = process.getInputStream();
try {
while ((in = is.read()) != -1) {
System.out.println((char)in);
}
} catch (IOException ex) {
ex.printStackTrace();
}
int exitCode = process.waitFor();
System.out.println("Exited with " + exitCode);

举个例子

关于Java 从单独的进程获取标准输出和标准错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31016299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com