监听控制台命令输出

Listening to console command output

我想在我的 Java 应用程序中 运行 一个控制台命令,它侦听传入消息并在收到消息时记录到控制台。当我在终端中执行时,控制台命令 运行 没问题。所以我想 运行 命令,然后在它输出一行时做一些事情,然后继续 运行ning 并收听其他新消息。我通过以下代码尝试了这个:

try {
    ProcessBuilder builder = new ProcessBuilder(PYTHON_PATH, YOWSUP_CLI_PATH, "demos", "-r", "-c", YOWSUP_CONFIG);
    builder.redirectErrorStream(true);
    Process p = builder.start();
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));

    String line = "";
    log.info("Started listening...");

    // It does nothing from here on
    while ((line = reader.readLine()) != null) {
        log.info(line);
    }
    log.info("Stopped listening.");
} catch (Exception e) {
    e.printStackTrace();
}

但是当我 运行 这段代码时,它记录了 "Started listening..." 字符串,所以我发送了一条消息来尝试它,但它没有记录任何东西,只是继续 运行什么都不做。

如果我没有正确解释某事,请直说!

您可以像这样使用 rt.exec 命令:

try {               
            proc = rt.exec(command);
            BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));
            BufferedReader stdError = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
            int value=0;
            String line = null;
            while ((line = stdInput.readLine()) != null) {      
                System.out.println(line);
            }
            while ((line = stdError.readLine()) != null) {
                System.out.println(line);
            }
            proc.waitFor();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

我使用命令中的“-u”参数修复了它,使用来自 MadProgrammer 的 this answer