使用InputStream读取Java进程状态,然后使用OutputStream发送命令提示

时间:2013-06-06 22:42:08

标签: java process inputstream outputstream

我正在阅读使用Java进程调用的脚本的输出。但是,在脚本运行过程中,它会在某些情况下提示用户回答y / n继续。但是,在阅读StackOverflow上的许多帖子后,我仍然坚持检测提示,然后在进程仍在运行时发送响应。

如果有人有任何想法,那就太棒了。

我尝试过从Scanner类和System.console读取不占优势。

这是我正在使用的代码的一部分。

    Process p;

    String file = "./upgrade.sh";


        cmds.add(file);
        cmds.add(sourcePath);
        cmds.add(outputDirectoryPath);
        cmds.add(zip);
        cmds.add("-c");
    //}

    pb = new ProcessBuilder(cmds);
    pb.directory(new File(binDir));

    p = pb.start();

    BufferedReader reader = new BufferedReader (new InputStreamReader(p.getInputStream()));
    BufferedReader reader2 = new BufferedReader (new InputStreamReader(p.getErrorStream()));
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));

    try 
    {
        String line = reader.readLine();
        while (line != null) 
        {
            System.out.println(line);
            line = reader.readLine();
        }


        reader.close();
        writer.close();
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }

    p.destroy();

1 个答案:

答案 0 :(得分:1)

问题是您使用BufferedReader。它只会在读取完整一行时返回,即行分隔符。但是如果脚本要求提示,则不会有行分隔符!因此它不会返回。

你必须使用其他类型的阅读器来控制这个过程。