我已将 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()));
请帮我解决这个问题!
最佳答案
不要在 exec 中使用重定向(<、> 或 |)!
重定向由交互式 shell(此处为 cmd.exe)读取和转换,其中它们从标准输入读取命令。然后 shell 打开相关文件并使用重定向的标准流调用程序。
exec
只是完成最后一部分,并通过 < ...input.text
作为 Python 程序的两个参数...不处理它们,并将它们传递给也不处理它们的脚本!所以 child 尝试读取标准输入,并一直在这里等待。
所以你应该:
- 根据
Runtime
使用 ProcessBuilder javadoc 现在是使用修改后的环境启动进程的首选方式 - 将子进程的输入流重定向到文件
或多或少:
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();
关于java - 使用java文件编译python程序并从文件中读取python程序的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35449205/