使用ProcessBuilder从Java Interactive Process读取InputStream

时间:2012-08-01 09:25:37

标签: java inputstream interactive processbuilder

我正在尝试使用ProcessBuilder从Java应用程序运行交互式可执行文件;它应该接受输入,产生输出然后等待下一个输入。输入/输出流的主要问题。我发送了一个输入,什么也没得到。这是代码:

private static Process process;
private static BufferedReader result;
private static PrintWriter input;

process = new ProcessBuilder("compile-lm", lmFile.toString(), " --score yes").redirectErrorStream(true).start();

input = new PrintWriter(new OutputStreamWriter(process.getOutputStream()), true);
input.println(message);
System.out.println(message);

result = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = new String();

while ((line = result.readLine()) != null)
{

/* Some processing for the read line */

System.out.println("output:\t" + line);
}

3 个答案:

答案 0 :(得分:1)

我已经尝试过你的代码它工作正常,代码没有问题。我认为您尝试执行的命令存在问题(它不返回任何内容)。尝试更改参数甚至更改整个命令进行测试。如果你可以在其他地方执行命令(例如终端尝试并查看具有相同参数的输出)

答案 1 :(得分:0)

我已多次使用类似的设置,但现在找不到工作副本:(我的第一直觉是将初始化读取器的行(结果变量)移到发送命令的行之前流程(input.println(message))。

答案 2 :(得分:0)

尝试关闭流程的输出流。基本上,你受到子进程输出端发生的任何缓冲的摆布。