通过Java WebApp使用Runtime.exec运行脚本

通过Java WebApp使用Runtime.exec运行脚本,java,python,web-applications,runtime.exec,Java,Python,Web Applications,Runtime.exec,我创建了一个Java WebApp,更像是使用HTTPServlets根据用户输入的内容运行一些Java代码。我可以从用户那里获取信息,将其传递给我的java程序,并将其传递回接口,没有问题。变得困难(相当烦人)的是尝试使用用户输入的信息并调用外部脚本(处理和响应用户请求所需的脚本)。我已经在一个常规的独立java应用程序中测试了这部分代码,它工作得很好,但是每当我尝试通过我的web应用程序运行它时,它要么永远挂起(我不知道它是否真的在运行脚本),要么甚至不运行脚本,只是继续到结果页 这是我的密

我创建了一个Java WebApp,更像是使用HTTPServlets根据用户输入的内容运行一些Java代码。我可以从用户那里获取信息,将其传递给我的java程序,并将其传递回接口,没有问题。变得困难(相当烦人)的是尝试使用用户输入的信息并调用外部脚本(处理和响应用户请求所需的脚本)。我已经在一个常规的独立java应用程序中测试了这部分代码,它工作得很好,但是每当我尝试通过我的web应用程序运行它时,它要么永远挂起(我不知道它是否真的在运行脚本),要么甚至不运行脚本,只是继续到结果页

这是我的密码:

 public void runScript() throws InterruptedException{

    try{

        chkPy = new BufferedWriter(new FileWriter("Log.txt"));

        chkPy.write("Running Python Script");
        chkPy.newLine();

        runtime = Runtime.getRuntime();
        p = runtime.exec("cmd /c run.bat > python_results.log");

        BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
        BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

        String line = "";
        while ((line = stdInput.readLine()) != null) {
      chkPy.write(line);
              chkPy.newLine();
        }
        while ((line = stdError.readLine()) != null) {
                chkPy.write(line);
                chkPy.newLine();
        }


        int exitVal = p.waitFor();

        chkPy.write("Exit Value" +exitVal);
        chkPy.flush();
        chkPy.close(); 

    }catch(IOException ex){

    }
}

更新
Netbeans附带了一个GlassFish服务器的实现,尽管听起来很愚蠢,但我并不是第一次看到它(我现在才看到),但是脚本正在编译。但我似乎遇到了另一个问题,因为现在即使脚本已经完成文件的编写,webapp也会死锁。。。。如何解决这个问题???

在单独的线程中读取输入和错误流


或者使用Commons Exec库:

问题是我使用的是netbeans,它会自动启动一个GlassFish服务器,所有的输出都会一直在那里。。。。。。所以我有点明白了,但是谢谢你的帮助!