gpt4 book ai didi

java - Java进程从子进程获取InputStream

转载 作者:行者123 更新时间:2023-12-02 07:08:04 24 4
gpt4 key购买 nike

我使用processbuilder fork了一个子进程,我想获取子进程的输出。所以我使用进程的getInputStream来获取子进程的输出。我发现只有当子进程退出或子进程退出时,父进程才能读取子进程的输出子进程的标准输出已关闭。

子进程的System.out.flush()不起作用。

但是我需要多次获得输出。这种情况我该怎么办?

最佳答案

如果没有看到您的代码,并且特别不知道您的子流程中的内容,就很难提供帮助。这是一个适合我的示例,其中子进程打印出文本,等待三秒钟,然后打印出更多文本。在我的机器(Windows XP 上的 Java 6)上,我看到初始文本、暂停,然后是剩余文本 - 所有这些都在子进程退出之前。

import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;


public class TestProcessBuilder
{
public static void main(String args[])
{
try
{
String threeCommands[] =
{ "cmd", "/c",
"dir", // prints out text
"&&",
"ping", "127.0.0.1", "-n", "3", ">", "nul", // waits 3 seconds
"&&",
"dir" // prints out more text
};
ProcessBuilder builder = new ProcessBuilder(threeCommands);
builder.directory(new File("C://"));
builder.redirectErrorStream();

Process subProcess = builder.start();

// this reads from the subprocess's output stream
BufferedReader subProcessInputReader =
new BufferedReader(new InputStreamReader(subProcess.getInputStream()));

String line = null;
while ((line = subProcessInputReader.readLine()) != null)
System.out.println(line);

subProcessInputReader.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

关于java - Java进程从子进程获取InputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15859395/

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