Java 侦听控制台命令输出
我想在我的Java应用程序中运行一个console命令,它侦听传入的消息,并在收到消息时记录到控制台。console命令在终端中执行时运行良好。所以我想运行这个命令,然后在它输出一行时执行一些操作,然后继续运行并侦听其他新消息。我通过以下代码进行了尝试:Java 侦听控制台命令输出,java,bufferedreader,processbuilder,Java,Bufferedreader,Processbuilder,我想在我的Java应用程序中运行一个console命令,它侦听传入的消息,并在收到消息时记录到控制台。console命令在终端中执行时运行良好。所以我想运行这个命令,然后在它输出一行时执行一些操作,然后继续运行并侦听其他新消息。我通过以下代码进行了尝试: try { ProcessBuilder builder = new ProcessBuilder(PYTHON_PATH, YOWSUP_CLI_PATH, "demos", "-r", "-c", YOWSUP_CONFIG);
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”参数,并使用了from MadProgrammer进行了修复。看看,也可以尝试使用
ProcessBuilder\inheritaio
——我假设您正在尝试运行pythoncommand@MadProgrammer谢谢python命令中的“-u”参数起到了作用。ProcessBuilder
通常是首选的,因为它更易于配置,但更大的问题是python在它这方面做了一些奇怪的事情,这有时会阻止我们读取它的输出,至少在它退出之前是如此