监听控制台命令输出
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。
我想在我的 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。