Java执行shell命令,如何真实的读取输出?

q5lcpyga  于 12个月前  发布在  Shell
关注(0)|答案(2)|浏览(106)

通过下面的代码,我可以执行并获取shell命令,并得到输出,但只有在进程结束后,我才能得到标准输出。如何在进程执行时获得实时输出

Process process = Runtime.getRuntime().exec(command);
         // close process's output stream.
         process.getOutputStream().close();

         pIn = process.getInputStream();
         InputStreamReader inputStreamReader = new InputStreamReader(pin, "UTF-8");
         bufferedReader = new BufferedReader(inputStreamReader);
         String line = null;
         while ((line = bufferedReader.readLine()) != null) {
             this.buf.append(line + "\n");
         }
        
        process.waitfor();
8mmmxcuj

8mmmxcuj1#

您可以使用进程生成器读取执行命令的响应

ProcessBuilder pb = new ProcessBuilder();
            pb.command(cmd);
            Process proc = pb.start();
            proc.waitFor();

            InputStream inputStream = proc.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String responseLine = "";
            StringBuilder output = new StringBuilder();
            while (( responseLine = reader.readLine())!= null) {
                output.append(responseLine + "\n");
            }
wqlqzqxt

wqlqzqxt2#

这里有一种方法可以通过将输出重定向到与java进程的输出相同的位置来真实的显示命令的输出。

ProcessBuilder pb = new ProcessBuilder();
pb.command("./a-script.sh")
pb.inheritIO() // 
def proc = pb.start()
proc.waitFor()

相关问题