gpt4 book ai didi

Java 运行时未捕获 Mac 上的 STDOUT

转载 作者:行者123 更新时间:2023-12-01 11:09:01 25 4
gpt4 key购买 nike

这里是 Mac OS,但是正在寻找一个与平台无关的解决方案。另请注意,即使这里提到了 Consul,它也只是任意的,解决方案应该与此无关,也不应该需要了解,领事。

<小时/>

当我打开 shell 并运行 consul -v (以确定 Consul 是否在本地安装)时,我得到以下 STDOUT:

Consul v0.5.2
Consul Protocol: 2 (Understands back to: 1)

当我运行以下代码时:

public class VerifyConsul {
public static void main(String[] args) {
PrintStream oldPS = System.out;
try {
Runtime runtime = Runtime.getRuntime();
Process proc;

ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream newPS = new PrintStream(baos);

System.setOut(newPS);
proc = runtime.exec(“consul -v”);
proc.waitFor();

String capturedOut = baos.toString();

if(capturedOut.isEmpty()) {
throw new IllegalArgumentException(“Consul not found.”);
}
} catch(Throwable t) {
System.out.println(t.getMessage());
System.setOut(oldPS);
}
}
}

我收到IllegalArgumentException,指出未找到Consul

我的代码有什么问题吗?为什么它不“ Hook ”/捕获 STDOUT?

最佳答案

使用Process#getInputStream()读取 STDOUT 或 Process#getErrorStream()读取 STDERR

这是一个示例(使用 java 进程并读取 STDERR):

package so32589604;

import org.apache.commons.io.IOUtils;

public class App {
public static void main(String[] args) throws Exception {
final Runtime runtime = Runtime.getRuntime();
final Process proc = runtime.exec("java -version");
proc.waitFor();
// IOUtils from apache commons-io
final String capturedOut = IOUtils.toString(proc.getErrorStream());

System.out.println("output = " + capturedOut);
if(capturedOut.isEmpty()) {
throw new IllegalArgumentException("Java not found.");
}
}
}

关于Java 运行时未捕获 Mac 上的 STDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32589604/

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