【问题标题】:how to in java start and interact with the console application如何在 java 中启动并与控制台应用程序交互
【发布时间】:2018-12-18 12:45:04
【问题描述】:

我有一个用 c 编写的控制台应用程序,它在控制台中运行并且有自己的伪控制台。通过它,我配置了这个应用程序并运行它。一切都好。 现在我试图在 Java 应用程序中运行这个应用程序,但我遇到了问题。 例如,我使用 sh

ProcessBuilder builder = new ProcessBuilder("sh");
builder.redirectErrorStream(true);
Process process = builder.start();

try (BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
     BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()))) {

    bw.write("echo lol");

    while (true) {
        // System.out.println(process.isAlive());
        if (br.ready()) {
            System.out.println(br.readLine());
        }
    }
} catch (Exception ex) {
    ex.printStackTrace();
}

主要思想是在控制台中运行应用程序并向其发送几个命令。

【问题讨论】:

  • 如我所见,您正试图将标准输入和标准输出重定向到另一个进程。那是:stackoverflow.com/questions/10407308/… 你想要达到什么目的?
  • 看起来像。会尝试
  • 它有效,但只有一次。如果:` PrintWriter pw = new PrintWriter(process.getOutputStream()); pw.println("echo Hello World"); pw.println("回声哈哈");将只打印你好字
  • 试试:pw.println("echo Hello World"); pw.flush(); pw.println("echo lol"); pw.flush();
  • 试试看。还是打个招呼((

标签: java linux


【解决方案1】:

所以,经过几次实验,我得到了答案。

    ProcessBuilder builder = new ProcessBuilder("sh");
    Process process = builder.start();


    BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
    new Thread(new Runnable() {
        public void run() {
            Scanner scan = new Scanner(br);
            while (true) {
                try {
                    if (!br.ready()) break;
                    System.out.println(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }
    }).start();
    PrintWriter bw = new PrintWriter(process.getOutputStream());
    bw.println("echo Hello World");
    bw.println("echo lol");
    bw.flush();
    bw.close();

【讨论】:

    猜你喜欢
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多