我已将我的python代码存储在文件中,然后输入通过input.txt传递。
String rollno="13F127";
String file="add";
Process p = Runtime.getRuntime().exec("C:\\Python34\\python C:\\Users\\Raga\\Documents\\"+rollno+"\\"+file+".py < C:\\Users\\Raga\\Documents\\"+rollno+"\\input.txt");
当我使用jsp文件运行它时,加载和输出都需要很长时间。请帮我解决一下这个。 我已经使用缓冲和输入读取器读取了这个过程输出。
stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
请帮助我!
答案 0 :(得分:1)
不要对exec使用重定向(&lt;,&gt;或|)!
重定向由交互式shell(此处为cmd.exe)读取和转换,其中它们从标准输入读取命令。然后shell打开相关文件并使用重定向的标准流调用程序。
exec
只做最后一部分,并将< ...input.text
作为两个参数传递给Python程序......不处理它们并将它们传递给不处理它们的脚本!所以孩子试着阅读标准输入,并一直在这里等待。
所以你应该:
Runtime
javadoc 的ProcessBuilder现在是启动已修改环境的流程的首选方式 或多或少:
ProcessBuilder pb = new ProcessBuilder("C:\\Python34\\python",
"C:\\Users\\Raga\\Documents\\"+rollno+"\\"+file+".py");
pb.redirectInput(Redirect.fromFile("C:\\Users\\Raga\\Documents\\"+rollno+"\\input.txt"));
Process p = pb.start();