通过Java WebApp使用Runtime.exec运行脚本
我创建了一个Java WebApp,更像是使用HTTPServlets根据用户输入的内容运行一些Java代码。我可以从用户那里获取信息,将其传递给我的java程序,并将其传递回接口,没有问题。变得困难(相当烦人)的是尝试使用用户输入的信息并调用外部脚本(处理和响应用户请求所需的脚本)。我已经在一个常规的独立java应用程序中测试了这部分代码,它工作得很好,但是每当我尝试通过我的web应用程序运行它时,它要么永远挂起(我不知道它是否真的在运行脚本),要么甚至不运行脚本,只是继续到结果页 这是我的密码:通过Java WebApp使用Runtime.exec运行脚本,java,python,web-applications,runtime.exec,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也会死锁。。。。如何解决这个问题???在单独的线程中读取输入和错误流
或者使用Commons Exec库:问题是我使用的是netbeans,它会自动启动一个GlassFish服务器,所有的输出都会一直在那里。。。。。。所以我有点明白了,但是谢谢你的帮助!