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

时间:2012-01-26 16:26:53

标签: java python web-applications runtime.exec

我创建了一个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死锁,尽管脚本已经完成了文件的编写....我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

阅读输入&分离线程中的错误流。

或使用Commons Exec库:http://commons.apache.org/exec/