gpt4 book ai didi

java - 如何在Runtime.exec中实时获取stdout和stderr?

转载 作者:行者123 更新时间:2023-12-01 16:35:33 28 4
gpt4 key购买 nike

我有以下代码:

 Process runJob = null;
try {
runJob = Runtime.getRuntime().exec(args);

InputStream cmdStdErr = null;
InputStream cmdStdOut = null;

cmdStdErr = runJob.getErrorStream();
cmdStdOut = runJob.getInputStream();


String line;
BufferedReader stdOut = new BufferedReader (new InputStreamReader (cmdStdOut));
while ((line = stdOut.readLine ()) != null) {
logger.info(line);

}

cmdStdOut.close();

// send error to Ab Initio and exit
BufferedReader br = new BufferedReader(new InputStreamReader(cmdStdErr));
String errMsg="";
while ((line = br.readLine()) != null) {
logger.info(line);
errMsg += line;

}
cmdStdErr.close();

res = runJob.waitFor();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

问题是,当作业运行时,它会产生大量输出,但 stdout 和 stderr 的输入流仅在作业完成后才打印输出。

有没有办法实时获取输出,即在作业输出时获取 stderr 和 stdout?

谢谢,杰杰

最佳答案

您正在尝试读取 stdout 的全部 - 这基本上会阻塞,直到进程完成 - 然后读取 stderr 的全部

使用两个线程,一个从 stdout 读取,一个从 stderr 读取 - 这样,“下一个”哪一个有数据并不重要,您将从两个线程中读取数据。

关于java - 如何在Runtime.exec中实时获取stdout和stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9548232/

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