【发布时间】:2015-12-15 01:54:25
【问题描述】:
我想在我的 Java 应用程序中运行一个控制台命令,该命令侦听传入的消息并在收到消息时记录到控制台。当我在终端中执行控制台命令时,它运行良好。所以我想运行命令,然后在它输出一行时做一些事情,然后继续运行并监听其他新消息。我通过以下代码进行了尝试:
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();
}
但是当我运行此代码时,它会记录“开始监听...”字符串,所以我发送一条消息尝试一下,但它没有记录任何内容,只是继续运行而不做任何事情。
如果我没有正确解释,请直说!
【问题讨论】:
-
看看this,也可以尝试使用
ProcessBuilder#inheritIO- 我假设您正在尝试运行python命令 -
@MadProgrammer 谢谢!我的 python 命令中的“-u”参数起到了作用。
标签: java bufferedreader processbuilder