0
我想在java中使用Processbuilder运行Linux进程,然后读取输入和错误流。 Linux进程是一个阻塞的进程,并将输出写入控制台/标准输出。读取java进程的输入流
当我尝试读取java进程的输入流(错误流重定向)时,在进程写入高达4K字节之前,我没有数据。一旦过程输出达到此限制,我就可以在输入流中获得数据。如何改变这种行为并从输入流实时获取数据,而不是等到4K。
这里是我的尝试:
process = new ProcessBuilder().command("some daemon program", "arg1").start();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null)
System.out.println(line);
我只后获取可用的数据输入流中〜4K字节。有任何想法吗???
在命令行界面中运行的同一个c程序,即使只有100个字节也会立即输出。但是,当使用java运行时,问题就出现了。 – user3741466
不可以。当它的输出运行到管道而不是控制台时,stdio线路缓冲不再发生。 Java与它无关。 – EJP