【问题标题】:Reading Java process status with InputStream and then sending command prompts with OutputStream使用 InputStream 读取 Java 进程状态,然后使用 OutputStream 发送命令提示符
【发布时间】:2013-06-03 03:09:12
【问题描述】:

我正在阅读使用 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();

【问题讨论】:

  • 最好你的脚本有非交互运行模式。
  • 不幸的是我无法控制脚本

标签: java process inputstream outputstream


【解决方案1】:

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

您必须使用其他类型的阅读器才能控制该过程。

【讨论】:

  • 好问题,我从来没有在 Java 中这样做过......但我想快速搜索会提供一些信息。
猜你喜欢
  • 2018-10-30
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多