Java进程在运行时打印输出

Java进程在运行时打印输出,java,linux,bash,Java,Linux,Bash,我试图在Java程序中运行split命令。当我在控制台中使用参数--verbose运行它时,它会按如下方式打印生成的块: creating file 'chunk00' creating file 'chunk01' creating file 'chunk02' 但当我在java程序中运行它时,这些输出将在完成过程后打印出来。当split进程运行时,我必须做什么才能获得输出 我使用了以下代码: ProcessBuilder pb = new ProcessBuilder("split", "

我试图在Java程序中运行
split
命令。当我在控制台中使用参数
--verbose
运行它时,它会按如下方式打印生成的块:

creating file 'chunk00'
creating file 'chunk01'
creating file 'chunk02'
但当我在java程序中运行它时,这些输出将在完成过程后打印出来。当
split
进程运行时,我必须做什么才能获得输出

我使用了以下代码:

ProcessBuilder pb = new ProcessBuilder("split", "-a 2", "-d", "-b 52MB","--verbose",path+"/"+db,"chunk");
        pb.redirectErrorStream(true);
        File workingFolder = new File("/home/hajibaba");
        pb.directory(workingFolder);
        Process proc = pb.start();
        BufferedReader stdInput = new BufferedReader(new InputStreamReader(proc.getInputStream()));

        // read the output from the command
        String s = null;
        while ((s = stdInput.readLine()) != null)
        {
            System.out.println(s);
        }
        proc.waitFor();

但是,它适用于使用
echo
打印相同结果的bash脚本。

I/O在交互会话中是行缓冲的,但在写入管道时是行缓冲的

要解决此问题,可以使用
unbuffer
命令关闭缓冲

ProcessBuilder pb = new ProcessBuilder("unbuffer", "split", "-a2", "-d", "-b52MB","--verbose",path+"/"+db,"chunk");

您还必须将“-a 2”拆分为“-a”、“2”,也必须将“-b 52MB”拆分为“-b”、“52MB”