在外部进程java中处理交互式提示

在外部进程java中处理交互式提示,java,process,Java,Process,我正在包装我经常与GUI界面一起使用的命令行应用程序。它基本上归结为执行它(作为Java进程),然后解析它的响应。然而,其中一个用例需要终端用户采取额外的操作(应用程序询问用户是否想要覆盖文件),我不知道如何处理。一旦出现此提示,InputStream和ErrorStream都将冻结。下面是executeCommand方法的(相当通用)代码: private void executeCommand(String command) { ProcessBuilder processBuil

我正在包装我经常与GUI界面一起使用的命令行应用程序。它基本上归结为执行它(作为Java进程),然后解析它的响应。然而,其中一个用例需要终端用户采取额外的操作(应用程序询问用户是否想要覆盖文件),我不知道如何处理。一旦出现此提示,InputStream和ErrorStream都将冻结。下面是executeCommand方法的(相当通用)代码:

private void executeCommand(String command) {

    ProcessBuilder processBuilder = new ProcessBuilder();
    processBuilder.command("bash", "-c", command);
    try {

        Process process = processBuilder.start();

        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
        BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));

        String line = null;

        while ((line = reader.readLine()) != null) {
           //some actions "File already exists. Do you want to overwrite ? [y/N]" line never gets to this point
        }

        while ((line = errorReader.readLine()) != null) {
           //some actions "File already exists. Do you want to overwrite ? [y/N]" line never gets to this point
        }
        handleExitCode(process.waitFor(),"Success!");

    } catch (IOException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我假设“文件已经存在。是否覆盖?[y/N]”提示正在通过其他通道传递。我只是不知道怎么处理。对我来说,理想的情况是,我可以用相同的问题提示messageBox,然后相应地传递响应。

当您派生子进程时,它需要从父进程继承I/O来谈论
stdin
stdout
。使用ProcessBuilder.inheritIO重定向stdin、stdout和stderr中的命令流

我建议使用图书馆,或者看一看。这将使您的实现更易于阅读,并且在阅读命令行输入时容易出错。谢谢您的回答。但我仍然不知道如何手动将数据传递给子进程的stdin。如果inheritaio方法将输出直接复制到parentProcess stdout,我还能够逐行解析输出吗?我想这可能是个问题