在浏览器中显示Sh脚本输出

时间:2014-05-15 13:35:54

标签: java browser output sh

我有一个webappliaction(在Jsp& Severlet中开发)执行sh脚本并且只在执行脚本后才在浏览器中显示输出但是我想打印输出,就像它在teriminal中执行一样(一个接一个地用于例如ping命令)。那么该用户将拥有在unix终端中工作的体验。我的脚本将运行将近一分钟(脚本开始停止我的WAS服务器),因此用户不应等到一分钟才能看到最终输出。他们应该看到脚本在启动过程后开始输出。请在下面找到我的示例代码。

pb = new ProcessBuilder("/bin/sh",script);
            pb.directory(new File(filePath));
            p = pb.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null){
               System.out.println(line);
               out.println(line);
            }
            p.waitFor();
            System.out.println ("exit: " + p.exitValue());
            out.println("exit: " + p.exitValue());
            p.destroy();
            out.println("Script Executed");

请有人指导我。

2 个答案:

答案 0 :(得分:2)

最后我得到了一个解决我的问题的方法,我刚刚在out.flush()之后添加了out.println(line);因此,每次在while循环中它的刷新输出到浏览器,它看起来像unix终端。下面的代码实现了神奇。

            pb = new ProcessBuilder("/bin/sh",script);
            pb.directory(new File(filePath));
            p = pb.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null){
               System.out.println(line);
               out.println(line);
               out.flush();
            }
            p.waitFor();
            System.out.println ("exit: " + p.exitValue());
            out.println("exit: " + p.exitValue());
            p.destroy();
            out.println("Script Executed");

答案 1 :(得分:1)

您的问题在代码示例中是不可见的,因为它在本地工作得很好(例如System.out)。所以逻辑意味着问题必须在客户端和服务器之间的网络中。你也没有展示如何创建out(我猜它是某种类型的套接字连接PrintStream)以及JSP如何读取它。你想要的是一些AJAX方法(XmlHttpRequest或类似的),可能你不使用它,但有些“天真”,老式的方式。我不是网络开发人员,但您最喜欢的搜索引擎或其他人可能会帮助您完成该部分。